该小应用是本人学习Java前期制作的程序,可能还有着一些Bug没有修复,敬请谅解!该应用用到了图形化界面、I/O流本地磁盘读取/写入数据、键盘事件、焦点事件、监听事件等知识。该应用拥有功能:
file菜单项:打开文件、保存文件、另存为文件、写入反馈文件。
edit菜单项:修改数据、检查中文拼写、检查英文拼写、查找单词。
源代码:

package recite;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.swing.filechooser.*;
public class Recite {public static void main(String args[]) {new Win();}
}
class Win extends JFrame implements ActionListener,FocusListener,KeyListener{JMenu menu,edit;JMenuItem open,save,save_as,modify,checkCH,checkEN,feedback,find;JMenuBar menuBar;JPanel nPanel,sPanel;JFileChooser fileChooser;Icon leftIcon=new ImageIcon("D:\\Program\\left.png"),rightIcon=new ImageIcon("D:\\Program\\right.png"),greenLight=new ImageIcon("D:\\Program\\d5.png"),blueLight=new ImageIcon("D:\\Program\\d1.png"),orangeLight=new ImageIcon("D:\\Program\\d9.png"),whiteLight=new ImageIcon("D:\\Program\\d2.png");JButton left,right,greenB,blueB,orangeB;int pageNum=1,pageTotal=100,selectionState,checkCHFlag=0,checkENFlag=1,modifyFlag=0,array1=100,array2=12,saveState=0,modifyed=0;Box baseBox,vBox[]=new Box[array2],hBox[]=new Box[array2];JTextField mess[]=new JTextField[array2],input[]=new JTextField[array2],answer[]=new JTextField[array2],focusField;JLabel page,status_bar;String data1[][]=new String[array1][array2],data2[][]=new String[array1][array2];Read autoReadFile=new Read();File file=new File("D:/Program/Data.txt");WindowAdapt windowAdapt=new WindowAdapt();Win(){init();setSize(800,800);setLocationRelativeTo(null);setVisible(true);windowAdapt.getFrame(this);addWindowListener(windowAdapt);setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);input[0].requestFocus();}void init() {setTitle("Recite");fileChooser=new JFileChooser();FileNameExtensionFilter filter=new FileNameExtensionFilter("Text","txt");fileChooser.setFileFilter(filter);nPanel=new JPanel();sPanel=new JPanel();left=new JButton();left.setIcon(leftIcon);left.setContentAreaFilled(false);left.setBorderPainted(false);left.setFocusable(false);right=new JButton();right.setIcon(rightIcon);right.setContentAreaFilled(false);right.setBorderPainted(false);right.setFocusable(false);greenB=new JButton();greenB.setIcon(whiteLight);greenB.setContentAreaFilled(false);greenB.setBorderPainted(false);greenB.setFocusable(false);blueB=new JButton();blueB.setIcon(whiteLight);blueB.setContentAreaFilled(false);blueB.setBorderPainted(false);blueB.setFocusable(false);orangeB=new JButton();orangeB.setIcon(orangeLight);orangeB.setContentAreaFilled(false);orangeB.setBorderPainted(false);orangeB.setFocusable(false);baseBox=Box.createVerticalBox();for(int i=0;i<array2;i++) {vBox[i]=Box.createVerticalBox();hBox[i]=Box.createHorizontalBox();mess[i]=new JTextField(6);mess[i].setEditable(false);mess[i].setFocusable(false);answer[i]=new JTextField(6);answer[i].setEditable(false);answer[i].setFocusable(false);input[i]=new JTextField(6);input[i].addFocusListener(this);mess[i].addKeyListener(this);answer[i].addKeyListener(this);input[i].addKeyListener(this);hBox[i].add(new JLabel("  "+(i+1)+" "));hBox[i].add(mess[i]);hBox[i].add(answer[i]);hBox[i].add(input[i]);vBox[i].add(hBox[i]);baseBox.add(vBox[i]);baseBox.add(Box.createVerticalStrut(10));}page=new JLabel("");status_bar=new JLabel("");nPanel.add(orangeB);nPanel.add(blueB);nPanel.add(greenB);sPanel.add(left);sPanel.add(page);sPanel.add(right);sPanel.add(status_bar);menuBar=new JMenuBar();menu=new JMenu("File");edit=new JMenu("Edit");open=new JMenuItem("open");save=new JMenuItem("save");save_as=new JMenuItem("save as");modify=new JMenuItem("modify");checkCH=new JMenuItem("checkCH");checkEN=new JMenuItem("checkEN");find=new JMenuItem("find");feedback=new JMenuItem("feedback");menu.add(open);menu.add(save);menu.add(save_as);menu.add(feedback);edit.add(modify);edit.add(checkCH);edit.add(checkEN);edit.add(find);menuBar.add(menu);menuBar.add(edit);add(nPanel,BorderLayout.NORTH);add(baseBox,BorderLayout.CENTER);add(sPanel,BorderLayout.SOUTH);open.addActionListener(this);save.addActionListener(this);save_as.addActionListener(this);modify.addActionListener(this);checkCH.addActionListener(this);checkEN.addActionListener(this);find.addActionListener(this);feedback.addActionListener(this);left.addActionListener(this);right.addActionListener(this);orangeB.addActionListener(this);blueB.addActionListener(this);greenB.addActionListener(this);setJMenuBar(menuBar);autoReadFile.readFile(file,data1,data2,mess,array2);pageNum=autoReadFile.pageNum;page.setText(pageNum+"/"+pageTotal);validate();}public void actionPerformed(ActionEvent e) {if(e.getSource()==open) {int state=fileChooser.showOpenDialog(this);if(state==JFileChooser.APPROVE_OPTION) {file=fileChooser.getSelectedFile();autoReadFile.readFile(file,data1, data2, mess,array2);pageNum=autoReadFile.pageNum;}status_bar.setText("Open success!");}else if(e.getSource()==save) {new Save(file,data1,data2,pageNum,array2);status_bar.setText("Save success!");saveState=1;}else if(e.getSource()==save_as) {if((modifyFlag==1)) {JOptionPane.showMessageDialog(this,"Please off modify","defaults",JOptionPane.WARNING_MESSAGE);return;}int state=fileChooser.showSaveDialog(this);if(state==JFileChooser.APPROVE_OPTION) {file=fileChooser.getSelectedFile();new Save(file,data1,data2,pageNum,array2);status_bar.setText("Save as success!");saveState=1;}}else if(e.getSource()==feedback) {Feedback.getInstance();}else if(e.getSource()==modify||e.getSource()==greenB) {if(checkCHFlag==0||checkENFlag==0) {JOptionPane.showMessageDialog(this, "Please press modify after check on!");return;}if(!(orangeB.getIcon()==orangeLight)&&(blueB.getIcon()==blueLight)) {JOptionPane.showMessageDialog(this, "Please press modify after check on!");return ;}if(modifyFlag==0) {for(int i=0;i<array2;i++) {mess[i].setEditable(true);mess[i].setFocusable(true);answer[i].setEditable(true);answer[i].setFocusable(true);}modifyFlag=1;modifyed=1;greenB.setIcon(greenLight);}else if(modifyFlag==1) {for(int i=0;i<array2;i++) {mess[i].setEditable(false);mess[i].setFocusable(false);answer[i].setEditable(false);answer[i].setFocusable(false);data1[pageNum-1][i]=mess[i].getText();data2[pageNum-1][i]=answer[i].getText();}modifyFlag=0;greenB.setIcon(whiteLight);}}else if(e.getSource()==checkCH||e.getSource()==blueB) {//check chineseif(checkCHFlag==0) {for(int i=0;i<array2;i++)answer[i].setText(data2[pageNum-1][i]);checkCHFlag=1;blueB.setIcon(blueLight);}else {for(int i=0;i<array2;i++)answer[i].setText(null);checkCHFlag=0;blueB.setIcon(whiteLight);}}else if(e.getSource()==checkEN||e.getSource()==orangeB) {//check englishif(checkENFlag==0) {for(int i=0;i<array2;i++)mess[i].setText(data1[pageNum-1][i]);checkENFlag=1;orangeB.setIcon(orangeLight);}else {for(int i=0;i<array2;i++)mess[i].setText(null);checkENFlag=0;orangeB.setIcon(whiteLight);}}else if(e.getSource()==find) {Find find=Find.getInstance();find.function(data1,array1,data2,array2);}else if(e.getSource()==left) {if(modifyFlag==1) {JOptionPane.showMessageDialog(this, "Please press left after modify off!");return ;}if(pageNum>1) {page.setText(--pageNum+"/"+pageTotal);for(int i=0;i<array2;i++) {if(checkENFlag==0)mess[i].setText(null);elsemess[i].setText(data1[pageNum-1][i]);if(checkCHFlag==0)answer[i].setText(null);elseanswer[i].setText(data2[pageNum-1][i]);input[i].setText(null);}input[0].requestFocus();}}else if(e.getSource()==right) {if(modifyFlag==1) {JOptionPane.showMessageDialog(this, "Please press right after modify off!");return ;}if(pageNum<pageTotal) {page.setText(++pageNum+"/"+pageTotal);for(int i=0;i<array2;i++) {if(checkENFlag==0)mess[i].setText(null);elsemess[i].setText(data1[pageNum-1][i]);if(checkCHFlag==0)answer[i].setText(null);elseanswer[i].setText(data2[pageNum-1][i]);input[i].setText(null);}input[0].requestFocus();}}}public void run() {String s1=input[selectionState].getText().trim(),s2=data2[pageNum-1][selectionState];System.out.println("input: "+s1+"  answer: "+s2);if(s1.equals(s2)) {System.out.println("Check: correct");status_bar.setText("Check: correct!");}else {System.out.println("Check: error");status_bar.setText("Check: error!");}}public void focusGained(FocusEvent e) {focusField=(JTextField)e.getSource();for(int i=0;i<array2;i++) {if(input[i]==focusField) {selectionState=i;System.out.println("now row: "+i);status_bar.setText(null);}}}public void keyReleased(KeyEvent e) {}public void keyPressed(KeyEvent e) {int key=e.getKeyCode();if(key==KeyEvent.VK_ENTER) {run();}else if(e.isControlDown()&&key==KeyEvent.VK_S) {new Save(file,data1,data2,pageNum,array2);System.out.println("control+s");status_bar.setText("(ctrl+s)Save success!");saveState=1;}else if(e.isShiftDown()&&key==KeyEvent.VK_DELETE) {for(int i=0;i<array2;i++)input[i].setText(null);}else if(e.isControlDown()&&key==KeyEvent.VK_3) {if(checkCHFlag==0||checkENFlag==0) {JOptionPane.showMessageDialog(this, "Please press modify after check on!");return;}if(!(orangeB.getIcon()==orangeLight)&&(blueB.getIcon()==blueLight)) {JOptionPane.showMessageDialog(this, "Please press modify after check on!");return ;}if(modifyFlag==0) {for(int i=0;i<array2;i++) {mess[i].setEditable(true);mess[i].setFocusable(true);answer[i].setEditable(true);answer[i].setFocusable(true);}modifyFlag=1;modifyed=1;greenB.setIcon(greenLight);}else if(modifyFlag==1) {for(int i=0;i<array2;i++) {mess[i].setEditable(false);mess[i].setFocusable(false);answer[i].setEditable(false);answer[i].setFocusable(false);data1[pageNum-1][i]=mess[i].getText();data2[pageNum-1][i]=answer[i].getText();}modifyFlag=0;greenB.setIcon(whiteLight);}}else if(e.isControlDown()&&key==KeyEvent.VK_2) {if(checkCHFlag==0) {for(int i=0;i<array2;i++)answer[i].setText(data2[pageNum-1][i]);checkCHFlag=1;blueB.setIcon(blueLight);}else {for(int i=0;i<array2;i++)answer[i].setText(null);checkCHFlag=0;blueB.setIcon(whiteLight);}}else if(e.isControlDown()&&key==KeyEvent.VK_1) {if(checkENFlag==0) {for(int i=0;i<array2;i++)mess[i].setText(data1[pageNum-1][i]);checkENFlag=1;orangeB.setIcon(orangeLight);}else {for(int i=0;i<array2;i++)mess[i].setText(null);checkENFlag=0;orangeB.setIcon(whiteLight);}}else if(e.isShiftDown()&&key==KeyEvent.VK_LEFT) {if(modifyFlag==1) {JOptionPane.showMessageDialog(this, "Please press left after modify off!");return ;}if(pageNum>1) {page.setText(--pageNum+"/"+pageTotal);for(int i=0;i<array2;i++) {if(checkENFlag==0)mess[i].setText(null);elsemess[i].setText(data1[pageNum-1][i]);if(checkCHFlag==0)answer[i].setText(null);elseanswer[i].setText(data2[pageNum-1][i]);input[i].setText(null);}input[0].requestFocus();}}else if(e.isShiftDown()&&key==KeyEvent.VK_RIGHT) {if(modifyFlag==1) {JOptionPane.showMessageDialog(this, "Please press right after modify off!");return ;}if(pageNum<pageTotal) {page.setText(++pageNum+"/"+pageTotal);for(int i=0;i<array2;i++) {if(checkENFlag==0)mess[i].setText(null);elsemess[i].setText(data1[pageNum-1][i]);if(checkCHFlag==0)answer[i].setText(null);elseanswer[i].setText(data2[pageNum-1][i]);input[i].setText(null);}input[0].requestFocus();}}else if(e.isControlDown()&&key==KeyEvent.VK_B) {Feedback.getInstance();}else if(e.isControlDown()&&key==KeyEvent.VK_F) {Find find=Find.getInstance();find.function(data1,array1,data2,array2);}}public void keyTyped(KeyEvent e) {}public void focusLost(FocusEvent e) {}class WindowAdapt extends WindowAdapter{ JFrame frame;public void windowClosing(WindowEvent e) {if(saveState==0&&modifyed==1) {int n=JOptionPane.showConfirmDialog(frame, "Save it?","Really",JOptionPane.YES_NO_OPTION);if(n==JOptionPane.YES_OPTION) new Save(file,data1,data2,pageNum,array2);}new Save(file,data1,data2,pageNum,array2);System.exit(0);}public void getFrame(JFrame frame) {this.frame=frame;}}
}
package recite;
import java.io.*;
public class Save {Save(File file,String data1[][],String data2[][],int pageNum,int array2){try {Writer writer=new FileWriter(file);BufferedWriter bWriter=new BufferedWriter(writer);for(int i=0;i<100;i++) {for(int j=0;j<array2;j++) {if((data1[i][j]!=null)&&(data2[i][j]!=null)) {bWriter.write(data1[i][j]);bWriter.newLine();bWriter.write("--------------------------------"+data2[i][j]);bWriter.newLine();}}}File userDataFile=new File(file.getParent(),"userDataFile.txt");userDataFile.createNewFile();System.out.println("user_data_file absolutePath:"+userDataFile.getAbsolutePath());System.out.println("user_data_file absolutePath exists:"+userDataFile.exists());Writer w=new FileWriter(userDataFile);BufferedWriter bW=new BufferedWriter(w);bW.write(String.valueOf(pageNum));bW.close();bWriter.close();}catch(Exception ex) {System.out.println(ex.toString());}}
}
package recite;
import java.io.*;
import javax.swing.*;
public class Read {int pageNum;void readFile(File file,String data1[][],String data2[][],JTextField mess[],int array2){try {File userDataFile=new File(file.getParent(),"userDataFile.txt");System.out.println("user_Data_File.txt exists:"+userDataFile.exists());Reader reader=new FileReader(file),reader2=new FileReader(userDataFile);BufferedReader bReader=new BufferedReader(reader),bReader2=new BufferedReader(reader2);String s=null;int i=0,j=0,x=0,y=0;while((s=bReader.readLine())!=null) {if(!s.startsWith("-")) {data1[i][j++]=s;if(j>=array2) {i++;j=0;}}else {s=s.replaceAll("-","");data2[x][y++]=s;if(y>=array2) {x++;y=0;}}}pageNum=Integer.parseInt(bReader2.readLine());for(int m=0;m<array2;m++) mess[m].setText(data1[pageNum-1][m]);bReader.close();bReader2.close();System.out.println("open file!");}catch(Exception exp) {System.out.println("Can't open file :");System.out.println(exp.toString());}}
}
package recite;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class Find extends JFrame implements KeyListener{private static Find find=null;WinAdapt winAdapt=new WinAdapt();JTextField input;JTextArea result;Box one_VBox,base_Box;String data1[][],data2[][];int array1,array2;private Find() {}public static Find getInstance() {if(find==null) {find=new Find();find.init();}else;return find;}void init() {setTitle("Find");setSize(500,350);setLocationRelativeTo(null);setVisible(true);addWindowListener(winAdapt);}void function(String data1[][],int array1,String data2[][],int array2) {this.data1=data1;this.data2=data2;this.array1=array1;this.array2=array2;setLayout(new FlowLayout());input=new JTextField(35);result=new JTextArea(12,6);result.setEditable(false);one_VBox=Box.createVerticalBox();base_Box=Box.createHorizontalBox();one_VBox.add(input);one_VBox.add(Box.createVerticalStrut(15));one_VBox.add(new JScrollPane(result));base_Box.add(one_VBox);add(base_Box);input.addKeyListener(this);}public void keyTyped(KeyEvent e) {}public void keyReleased(KeyEvent e) {}public void keyPressed(KeyEvent e) {int key=e.getKeyCode(),t=1;if(key==KeyEvent.VK_ENTER) {result.setText(" ");String s=input.getText();try {for(int i=0;i<array1;i++) {for(int j=0;j<array2;j++) {if(data1[i][j].contains(s)) {result.append((t++)+".   Page: "+(i+1)+"  row: "+(j+1)+"        "+data1[i][j]);result.append("\n");}if(data2[i][j].contains(s)) {result.append((t++)+".   Page: "+(i+1)+"  row: "+(j+1)+"        "+data2[i][j]);result.append("\n");}}}t=1;}catch(Exception ex) {}}}class WinAdapt extends WindowAdapter{public void windowClosing(WindowEvent e) {find=null;}}
}
package recite;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Feedback extends JFrame {JTextArea text;WindowAdap windowAdap=new WindowAdap();private static Feedback feedback=null;private Feedback(){}public static Feedback getInstance() {if(feedback==null) {feedback=new Feedback();feedback.init();}else;return feedback;}public void init() {this.setLayout(new FlowLayout());text=new JTextArea(25,42);text.setLineWrap(true);add(new JScrollPane(text));addWindowListener(windowAdap);try {String s;File file=new File("D:\\Program\\feedback.txt");Reader reader=new FileReader(file);BufferedReader bReader=new BufferedReader(reader);while((s=bReader.readLine())!=null) text.append(s+"\n");bReader.close();}catch(Exception ex) {System.out.println(ex.toString());}setTitle("feedback");setSize(500,500);setLocationRelativeTo(null);setVisible(true);}class WindowAdap extends WindowAdapter{public void windowClosing(WindowEvent e) {try {File file=new File("D:\\Program\\feedback.txt");Writer writer=new FileWriter(file);BufferedWriter bWriter=new BufferedWriter(writer);bWriter.write(text.getText());bWriter.close();}catch(Exception ex) {}feedback=null;}}
}

程序界面:

除了源代码,还需要在本地D://Program文件夹中插入如下四张图片或者文件名相同,大小接近的任意六张图片作为按钮

  • 第一列文本框是中文,是第二列文本框中的英文的中文翻译,可自定义中文意思(按下前两个按钮后再按第三个按钮,全部文本框为可编辑状态)
  • 第二列文本框是英文,是第一列文本框中的中文的英文翻译,可自定义中文意思(按下前两个按钮后再按第三个按钮,全部文本框为可编辑状态)
  • 第三列文本框是检查文本框,当用户隐藏了中文一列,或者英文一列,在第三列输入对应的翻译,会显示拼写正确与否

利用Java制作背单词小应用相关推荐

  1. python英文发音-利用Python制作查单词小程序(二):下载音频并播放单词读音

    上篇文章中,我们要使用"execjs"这个模块来执行JS代码,这个模块在Anaconda中没有预先安装好,我们需要单独安装它.那么,我们如何安装新的模块呢? 以Anaconda为例 ...

  2. python英语词汇读音_利用Python制作查单词小程序(一):抓取来自百度翻译的单词释义和音标...

    小编在学习英语的时候,遇到不认识的英语单词,会用百度翻译来查询单词的释义和音标,并播放单词的读音.为了便于复习和记忆,需要将单词的释义和音标以复制粘贴的方式保存到本地. 这个过程非常繁琐,于是小编就想 ...

  3. android打地鼠设计报告,android开发中利用handler制作一个打地鼠小游戏

    android开发中利用handler制作一个打地鼠小游戏 发布时间:2020-11-25 15:21:11 来源:亿速云 阅读:136 作者:Leah 这期内容当中小编将会给大家带来有关androi ...

  4. 自制安卓背单词小软件(1)

    一直喜欢看些英语方面的东西,提高词汇量自然是必不可少的.但是每天捧着单词书实在是不大方便,倒不如直接在手机上装个背单词的小软件,有空的时候就背几个,并且手机软件功能又多,又有艾宾浩斯什么这那的东西,相 ...

  5. 利用YQL制作自己的小工具

    YQL服务可以实现对网上不同数据源的query,filter,combine(查询,过滤,合并). YQL说明类似SQL.下面的例子就是用YQL说明实现从Flickr上得到一系列text为cat的图片 ...

  6. c#背单词小程序视频_C#用timer实现背单词小程序

    C#用timer实现背单词小程序 发布时间:2020-09-06 13:35:05 来源:脚本之家 阅读:124 作者:.你我山前没相见 本文实例为大家分享了C#用timer实现背单词小程序的具体代码 ...

  7. 基于C++GUI背单词小游戏设计与实现

    资源下载地址:https://download.csdn.net/download/sheziqiong/85723047 资源下载地址:https://download.csdn.net/downl ...

  8. python单词软件哪个好_利用Python分析背单词软件的惊人真相

    摘要:利用python分析背单词软件,揭秘你不知道的惊人真相 0×00 前言 你想知道背单词软件有大概多少人注册第一天都没有背完嘛 你想知道背单词软件这么火,这么多人在使用,真的有多少人真的在背诵嘛 ...

  9. uniapp使用网易有道词典接口做一个背单词小程序-单词发音-有道词典接口-不用注册token直接发请求

    uniapp使用网易有道词典接口做一个背单词小程序(不用注册token直接发请求) uniapp使用网易有道词典接口做一个背单词小程序-单词发音-有道词典接口 用到的接口: *1.获取单词发音(goo ...

最新文章

  1. 分治法求解最大子数组问题
  2. 对 Oracle 备份与恢复 的补充说明
  3. 休眠提示:排序和排序
  4. [转]微擎应用笔记3--manifest.xml文件使用说明
  5. IEEE1588精确网络时钟同步协议简介
  6. CoreAnimation动画入门(总结)
  7. 缺少所需的CD/DVD驱动器设备驱动程序
  8. 网页版红警的资源加载的实现
  9. Excel如何在同一单元格内同时添加公式和字符?
  10. 1.3. DIGITAL SIGNATURES数字签名
  11. Qt 学习(三) —— Qt 模块
  12. 如何让医药行业涌现更多“药神”?
  13. 验证“歌德巴赫猜想”
  14. 纪念一次面试机试失败的题目:
  15. C盘瘦身:QQ文件的清理及Group2文件夹
  16. 基于遗传算法优化的BP神经网络
  17. yapi接口导出为word_还在手工写接口测试文档,已经out了
  18. 《控方证人》证词怎样被推翻的
  19. win10系统打印机服务器在哪个文件夹,Win10打印机在哪添加和设置 Win10设备和打印机在哪?...
  20. linux内核移植jz2440,Linux内核移植到JZ2440

热门文章

  1. 5G 是否有过度承诺之嫌?
  2. 玩转容器,首先你得登上青云梯
  3. 反转!物联网火爆,开发技术却遇瓶颈!
  4. 雷军:小米有机会重返世界前三;苹果为 Siri 泄露隐私事件致歉;Apache Tomcat 9.0.24 发布 | 极客头条...
  5. 百元价位的水下相机?!1000个去海边的人有900个选择了它!
  6. 群聊太多?三步教你用 Python 自动监听转发群消息
  7. 京东淘汰“三类人”,近 18 万员工懵了?!
  8. 50 岁老码农:Python Bug 太多,我选 Rust 和 Go!
  9. 中国首个!百度云宣布边缘计算开源,发布智能边缘开源平台OpenEdge
  10. 为什么我 11 岁的儿子说要放弃编程,却又转战 Python