block怎么读音发音英语怎么读 您所在的位置:网站首页 mechanic英文怎么读音 block怎么读音发音英语怎么读

block怎么读音发音英语怎么读

#block怎么读音发音英语怎么读| 来源: 网络整理| 查看: 265

Java实现带发音的简易电子词典

(以下所有内容均属作者原创,使用请注明出处!)

最近我们在做Java的综合实训,我的题目比较简单,是做一个带有发音功能的简易电子词典。 要求:设计一个发音电子词典,具有对英语单词的查询、添加、修改、删除和读音功能。 窗口由菜单栏、工具条和显示栏组成。菜单栏包括文件、编辑、帮助等菜单;工具条包括输入栏和查询、添加、删除、发音等按钮;显示栏显示查询单词在词典中的所有解释。像类似的用Java做一个电子词典的程序很多,但我没有找到有带发音功能的例子。我这道题基本上也就是实现增删改查了,再加上一个音频文件的播放,应该是很好实现的,我做的时候难的主要是这些音频文件怎么找,而且还得是单个单词或者词组的音频。最后我在一位高人那里学到了一种方法,推荐给大家。

使用下面三个链接

http://dict.youdao.com/dictvoice?type=1&audio=forklift (英音)

http://dict.youdao.com/dictvoice?type=2&audio=forklift (美音)

http://dict.youdao.com/dictvoice?audio=road%2Broller (词组%2B是链接符号) 把audio=后面的单词换成需要的单词就可以下载每个单词发音了,下载下来之后改一下名称,默认类型.mp3,用格式工厂转换成Java能用的类型就行了。

在我的实习中,我定义一个类来存储每个单词的信息。

Word.java

package dictionary; public class Word { String name; String explain; // String ridio; Word next; public Word(Word nextval){ next = nextval; } public Word(String n,String e,Word nextval){ name = n; explain = e; // ridio = r; next = nextval; } public Word getNext(){ return next; } public void setNext(Word nextval){ next = nextval; } public String getName(){ return name; } public String getExplain(){ return explain; } // public String getRidio(){ // return ridio; // } public void setName(String n){ name = n; } public void setExplain(String e){ name = e; } public void setRidio(String r){ name = r; } }

然后定义一个链表类。通过方法load()读文件dictionary.txt(用.txt文件便于观察文件内容变化)把里面的单词信息存到若干个Word对象里面,,再把这些对象存到链表类中,然后定义增删改查等函数。当然,存储数据也可以使用数据库等其他方法,另外链表类也可以使用Linklist泛型类(而且这样应该简单些)。

Diction.java`

package dictionary; import java.io.*; public class Diction { Word head; Diction(){ head = new Word(null); } public void add(Word word){ word.next = head.next; head.next = word; } public String search(String n){ Word p = head; int i = 0; while(p.next != null){ p = p.next; if(p.name.equals(n)){ return p.explain; } } if(i == 0){ return "查找失败!"; } return n; } public void change(String n,String e){ Word p = head; Word q = p.next; int i = 0; while(p.next != null){ if(q.name.equals(n)){ q.explain = e; i = 1; break; } p = q; q = p.next; } if(i == 0){ System.out.println("查询单词失败,无法修改!"); } } public boolean delete(String n){ Word p = head; Word q = p.next; int i = 0; while(p.next != null){ if(q.name.equals(n)){ p.next = q.next; i = 1; return true; } p = q; q = p.next; } if(i == 0){ System.out.println("没找到单词,删除失败!"); } return false; } public void load(){ File fRead = new File(".\\dictionary.txt"); Reader in; try { in = new FileReader(fRead); BufferedReader bufferRead = new BufferedReader(in); String str = null; while((str = bufferRead.readLine()) != null){ Word p = new Word(null); p.name = str; if((str = bufferRead.readLine()) != null){ p.explain = str; p.next = head.next; head.next = p; } // if((str = bufferRead.readLine()) != null){ // p.ridio = str; // p.next = head.next; // head.next = p; // } } bufferRead.close(); in.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void save(){ File fWrite = new File(".\\dictionary.txt"); try { Writer out = new FileWriter(fWrite); BufferedWriter bufferWrite = new BufferedWriter(out); Word p = head; Word q = p.next; while(p.next != null){ bufferWrite.write(q.name); bufferWrite.newLine(); bufferWrite.write(q.explain); bufferWrite.newLine(); // bufferWrite.write(q.ridio); // bufferWrite.newLine(); p = q; q = p.next; } bufferWrite.close(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

定义好数据结构之后,就开始写界面了,界面设计比较简单就不多说。增删改查也不用说,已经在Diction.java中实现了这些功能,只需要放到界面中来。这里我主要说实现发音功能的监听事件,读取文本框的单词,在通过单词生成音频所在目录,接下来就是简单的音频播放事件了。最后在结束的时候触发一个窗口事件,将操作后的单词信息保存至文件中。此外,我趁还有时间加了一些乱七八糟的功能。

Window.java

public class Window extends JFrame{ Box baseBox,Box1,Box2,Box3; JMenuBar menubar; JMenu menu1,menu2,menu3; JMenuItem file,edit,usehelp,about,fileHelp; JTextField input; JTextArea show; JButton add; JButton delete; JButton change; JButton search; JButton speak; Diction dic = new Diction(); searchListen listen1 = new searchListen(); addListen listen2 = new addListen(); deleteListen listen3 = new deleteListen(); changeListen listen4 = new changeListen(); saveListen listen5 = new saveListen(); helpListen listen6 = new helpListen(); speakListen listen7 = new speakListen(); editListen listen8 = new editListen(); fileListen listen9 = new fileListen(); aboutListen listen10 = new aboutListen(); fileHelpListen listen11 = new fileHelpListen(); public Window(String s,int x,int y,int w,int h){ init(s); setLocation(x, y); setSize(w, h); setVisible(true); setDefaultCloseOperation(DISPOSE_ON_CLOSE); } void init(String s){ dic.load(); setTitle(s); setLayout(new FlowLayout()); Box1 = Box.createHorizontalBox(); Box2 = Box.createHorizontalBox(); Box3 = Box.createHorizontalBox(); baseBox = Box.createVerticalBox(); menubar = new JMenuBar(); menu1 = new JMenu("文件"); menu2 = new JMenu("编辑"); menu3 = new JMenu("帮助"); usehelp = new JMenuItem("使用帮助"); file = new JMenuItem("添加音频"); edit = new JMenuItem("修改文件"); about = new JMenuItem("关于产品"); fileHelp = new JMenuItem("添加帮助"); menubar.add(menu1); menubar.add(menu2); menubar.add(menu3); menu1.add(file); menu1.add(fileHelp); menu2.add(edit); menu3.add(usehelp); menu3.add(about); setJMenuBar(menubar); input = new JTextField(20); add = new JButton("增添"); delete = new JButton("删除"); change = new JButton("修改"); search = new JButton("查找"); speak = new JButton("发音"); Box1.add(new JLabel("请输入要操作的单词:")); Box1.add(input); Box2.add(search); Box2.add(add); Box2.add(change); Box2.add(delete); Box2.add(speak); Box3.add(new JLabel("操作结果:")); show = new JTextArea(12,12); show.setWrapStyleWord(true); show.setEditable(true); show.setLineWrap(true); show.setWrapStyleWord(true); JScrollPane jsp = new JScrollPane(show); jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); Box3.add(jsp); baseBox.add(Box1); baseBox.add(Box.createVerticalStrut(8)); baseBox.add(Box2); baseBox.add(Box.createVerticalStrut(8)); baseBox.add(Box3); add(baseBox); listen1.getText(input); listen1.getArea(show); search.addActionListener(listen1); listen2.getText(input); listen2.getArea(show); add.addActionListener(listen2); listen3.getText(input); delete.addActionListener(listen3); listen4.getText(input); listen4.getArea(show); change.addActionListener(listen4); addWindowListener(listen5); usehelp.addActionListener(listen6); edit.addActionListener(listen8); file.addActionListener(listen9); about.addActionListener(listen10); fileHelp.addActionListener(listen11); listen7.getText(input); speak.addActionListener(listen7); } public interface Listen1 extends ActionListener{ public void getText(JTextField text); } public interface Listen2 extends ActionListener{ public void getArea(JTextArea area); } class searchListen implements Listen1,Listen2{ JTextField textInput; JTextArea textShow; public void getText(JTextField text){ textInput = text; } public void getArea(JTextArea area){ textShow = area; } public void actionPerformed(ActionEvent e) { String str = textInput.getText(); textShow.setText(null); if(dic.search(str).equals("查找失败!")){ JOptionPane.showMessageDialog(null, "查找失败!","消息对话框",JOptionPane.WARNING_MESSAGE); } else{ textShow.append(dic.search(str)); } } } class addListen implements Listen2,Listen1{ JTextField textInput; JTextArea textShow; public void getText(JTextField text){ textInput = text; } public void getArea(JTextArea area){ textShow = area; } public void actionPerformed(ActionEvent e) { String str1 = textInput.getText(); String str2 = textShow.getText(); Word word = new Word(null); word.name = str1; word.explain = str2; dic.add(word); JOptionPane.showMessageDialog(null, "添加成功!","消息对话框",JOptionPane.WARNING_MESSAGE); } } class deleteListen implements Listen1{ JTextField textInput; JTextArea textShow; public void getText(JTextField text){ textInput = text; } public void actionPerformed(ActionEvent e) { String str = textInput.getText(); if(dic.delete(str)){ JOptionPane.showMessageDialog(null, "删除成功!","消息对话框",JOptionPane.WARNING_MESSAGE); } else JOptionPane.showMessageDialog(null, "删除失败!","消息对话框",JOptionPane.WARNING_MESSAGE); } } class changeListen implements Listen1,Listen2{ JTextField textInput; JTextArea textShow; public void getText(JTextField text){ textInput = text; } public void getArea(JTextArea area){ textShow = area; } public void actionPerformed(ActionEvent e) { String str = textInput.getText(); String str2 = textShow.getText(); dic.change(str, str2); JOptionPane.showMessageDialog(null, "修改成功!","消息对话框",JOptionPane.WARNING_MESSAGE); } } class saveListen extends WindowAdapter{ public void windowClosing(WindowEvent e){ dic.save(); System.exit(0); } } class speakListen implements Listen1{ JTextField textInput; public void getText(JTextField text) { textInput = text; } public void actionPerformed(ActionEvent e) { try{ String str = "word/"+textInput.getText()+".wav"; File file = new File(str); URI uri = file.toURI(); URL url = uri.toURL(); AudioClip clip; clip = Applet.newAudioClip(url); clip.play(); } catch(Exception e1){ System.out.print(e1.getMessage()); } } } class helpListen implements ActionListener{ public void actionPerformed(ActionEvent e){ JOptionPane.showMessageDialog(null, "查询:输入单词,点击查询,在文本框显示结果;\n" + "增添:输入单词,在文本框输入解释,点击增添即可;\n" + "删除:输入单词,点击删除即可将此单词及其注释删除;\n" + "修改:输入单词,在文本框输入修改后的注释,点击修改;\n" + "如需添加音频文件,请点击菜单项的文件,建议添加前首先查看添加帮助;\n" + "另:请谨慎修改存放单词的文件,否则有可能造成产品崩溃。若一定要修改,请按标准格式修改!","帮助",JOptionPane.WARNING_MESSAGE); } } class editListen implements ActionListener{ public void actionPerformed(ActionEvent e){ try { Runtime.getRuntime().exec("cmd /c start explorer .\\dictionary.txt"); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } class fileListen implements ActionListener{ public void actionPerformed(ActionEvent e) { try { Runtime.getRuntime().exec("cmd /c start explorer .\\word"); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } class aboutListen implements ActionListener{ public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "产品名称:简易电子词典\n作者:\n日期:2017年6月28日\n声明:版权所有,侵权必究!使用请注明作者!","关于简易电子词典",JOptionPane.WARNING_MESSAGE); } } class fileHelpListen implements ActionListener{ public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "在菜单栏点击添加音频选项,将需要添加的音频文件存放至打开的目录下!\n\n注意:文件命名格式必须为“单词名.wav”,其他格式名无效\n\n音频材料寻找方法:\n\t" + "http://dict.youdao.com/dictvoice?type=1&audio=forklift (英音)\n\t" + "http://dict.youdao.com/dictvoice?type=2&audio=forklift (美音)\n\t" + "http://dict.youdao.com/dictvoice?audio=road%2Broller (词组%2B是链接符号)\n" + "把上面三个链接audio=后面的单词换成任意单词就可以下载每个单词发音了","关于简易电子词典",JOptionPane.WARNING_MESSAGE); } } }

最后就是写一个类实现功能了。实现之后界面就是下面这样了,Java实现带发音的简易电子词典【源码】。

这里写图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有