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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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 blocke.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);}elseJOptionPane.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 blocke1.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 blocke1.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实现带发音的简易电子词典【源码】。

Java实现带发音的简易电子词典相关推荐

  1. python自己做电子词典_PyQt5实现简易电子词典

    PyQt5是python中一个非常实用的GUI编程模块,功能十分强大.刚刚学完了Pyqt的编程,就迫不及待的写出了一个电子词典GUI程序.整个程序使用qt Desiner把整个gui界面做好,槽函数则 ...

  2. MATLAB 手把手带你制作第一个APP designer程序(电子词典)

    注:左上角图标的添加方式(老版本和新版本俩种方法)放在文章最后 注此方法针对的为2019版本及之前的版本,比较新版本以增添该功能,直接设置uifigure的Icon属性即可,使用压缩包内文件可将sta ...

  3. 手把手教你设计简易电子负载仪

    最近搞了一个DCDC电源,所以需要一个电子负载仪,在X宝上买了一个简易电子负载仪后,发现老板没做散热,电路板工作电源不是直流电源,为了解决这个问题,自己动手设计了输入12V,带散热的简易电子负载仪. ...

  4. java设计单词英译汉小助手_java课程设计——英汉电子词典编程

    Java课程设计--英汉电子词典 一.需求分析 二十世纪后半叶,以电子计算机为代表的现代科学获得了突飞猛进的发展并迅速和人们的日常生活结合在一起.计算机技术的发展和进步也使电子语言词典的诞生成为可能. ...

  5. 51单片机+ds1302+lcd1602简易电子时钟(带闹钟功能)

    51单片机+ds1302+lcd1602简易电子时钟(带闹钟功能) AT89C52.LCD1602.DS1302.speaker. Proteus仿真 实例代码 #include<reg52.H ...

  6. 用Java编译的电子词典(包含MySQL,词典为单独的一个窗口)

    这个电子词典的代码主要包含连接调用数据库,建立窗口,向窗口里面加入面板,以及向面板里面加入组件 电子词典用的词汇表是MySQL里面建立的,所以写程序之前需要知道怎么用Java连接到MySQL, 首先你 ...

  7. 基于Java的电子词典的设计与实现

    技术:Java等 摘要: 电子词典英汉互译系统是基于J2EE开发的.在MyElicpse平台上使用Java和Oracle开发.主要解决个人以及广大朋友的英汉互译问题障碍.本系统可进行登陆查询,并可以生 ...

  8. 实现电子词典_它是一部电子词典,一部翻译机,一部口语机还是一部出游的随身WiFi...

    科技扒爷带你看 有了小爱老师,一定程度上解决了英语学习的问题.它是一部电子词典.一部翻译机,一部口语机.还是一部出游的随身WiFi. 外观上,全白配色,磨砂质感的塑料机身,3.97英寸LCD触摸屏,操 ...

  9. 手机电子词典_网易有道入局,「智能化」能拯救电子词典这个「老古董」吗?...

    电子产品,向来代表着「新奇」和「进步」.但进步同时也意味着速朽,上一代造物不断被后继者兼并.取代.于是,软盘.小灵通.VCD 等名词一个个从市场上消隐,进入互联网「前浪」们的回忆. 但有个领域似乎独立 ...

  10. 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 4

    前文: 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 3 导航: 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 The E ...

最新文章

  1. pyqt5实战之幻彩大蛇(贪吃蛇)-1
  2. finalshell Linux 传输文件 xftp
  3. 微信三方授权域名问题
  4. SpringBoot Mybatis EnumTypeHandler自定义统一处理器
  5. boost::intrusive::derivation_value_traits用法的测试程序
  6. 2021年安徽高考英语口试成绩查询,2021高考英语口语考试成绩
  7. target html语言,html中a标签的target属性
  8. JAVA中当子类覆盖一个父类的_java – 当子类中的某个方法被覆盖时,父类如何运行?...
  9. https openssl http2
  10. 东芝移动硬盘无法弹出密保,无法执行该软件,因为未启动需要的服务程序
  11. vue-cli脚手架卡在 ‘98%’ after emitting CopyPlugin 报错,无法运行
  12. 点到线段的最短距离——矢量法
  13. 带宽、峰值带宽,网速是什么,它们有什么关系?
  14. 一个大型虚拟项目包含位于不同地点的许多干系人_PLAN8T ART 丨在虚拟维度的拼贴现实中,漫游,想象。...
  15. cobbler sync 错误
  16. 计算机在线答疑系统,在线答疑系统的设计与实现(JSP,SQLServer)(含录像)
  17. UE4性能观察的基础
  18. 通过自定义打印纸张的大小,实现打印到哪里纸张就停止在哪里。
  19. C++:乘法运算符和取模运算符
  20. org 0x7c00解疑

热门文章

  1. TLE82453-3SA-芯片手册
  2. CAD图纸中图块无法打开编辑?
  3. Win10无法安装 文鼎CS行楷.TTF
  4. 默纳克系统用服务器呼梯设定,默纳克系统常见问题之四如何区分3000与3000new _ 默者_h...
  5. Angular端口4200被占用后如何处理
  6. vue前端UI框架收集
  7. 关于matlab匿名函数,求导
  8. 小程序加入人脸识别_微信小程序实现人脸识别
  9. 数据清洗(一)----- 清洗数据的目的及基本格式、类型与编码
  10. Cocos2d-lua中lua代码加密成luac