news 2026/6/16 5:19:27

Java应用实例:简易背单词程序(更新)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java应用实例:简易背单词程序(更新)

一、预期实现功能

  • V1.0:
    准备数据: 找到 单词与翻译的对照数据 存入到文件中
    在程序中读取文件中的数据
  • V2.0:
    1:随机抽取单词,去掉其中某个字母,要求用户输入这个字母填空
    2:给出中文翻译,输入单词 实现拼写
    3:抽取单词,给出4个选项 要求选择
  • V3.0:
    错题记忆,将之间出错的题,在新的练习再重复出现
    刷题的规划,15天一轮
    模式选择:CET-4/6高考 中考 等

二、功能实现

先从最简洁的界面开始,大概界面预期效果如下

可以看到,这里我们需要创建JFrame窗口对象,然后添加标签JLabel按钮JButton组件,为了方便区分,我们把初始窗口写到showUI方法

(由于后续点击按钮后要进行窗体刷新操作,为了便于编写,我们导入一个面板JPanel组件,在面板上进行操作)

public void showUI() { //wl.setPanel(panel); wl.setWordsUI(this); JFrame jf = new JFrame("背单词"); jf.setTitle("背单词"); jf.setSize(500, 500); jf.setLocationRelativeTo(null);//窗体居中显示到屏幕正中间 jf.setDefaultCloseOperation(3); //jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel.setLayout(null);//没有布局,所有的组件需要自己设置位置和大小 JLabel jl = new JLabel("请选择题库"); JButton jbu = new JButton("CET-4"); JButton jbu2 = new JButton("CET-6"); Font font = new Font("微软雅黑", Font.BOLD, 20);//设置字体 jl.setFont(font); jbu.setFont(font); jbu2.setFont(font); panel.add(jl);//添加组件 panel.add(jbu); panel.add(jbu2); jl.setBounds(150, 100, 200, 50);//调整位置 jbu.setBounds(150, 150, 200, 50); jbu2.setBounds(150, 200, 200, 50); jbu.addActionListener(wl); jbu2.addActionListener(wl); jf.add(panel);//添加面板 jf.setVisible(true);//可见 }

初始界面设置完成后,需要编写对应的响应操作,我们可以创建一个WordListener监听类来编写对应的响应操作,JButton组件对应的监听器为动作监听器ActionListener,注意需要引用接口

当我们点击按钮时,触发以下判断(注意这里的文件在项目同级文件夹下)

这里我们读取文件的方式为行读取(先字符读取,自动补全后将行读取操作放到字符读取第一个while循环内),并将字符串根据#拆分成两部分,分别存入engList数组和chnList数组内

if(s.equals("CET-4")){ //加载四级词库 File file = new File("words/CET-4.txt"); //文件读取 //单个字节 FileReader fr = null; try { fr = new FileReader(file); //读取一行 BufferedReader br = new BufferedReader(fr); while(true){ String line = br.readLine(); if(line==null){ break; } //拆分字符串 String[] eng_chn = line.split("#"); engList.add(eng_chn[0]); chnList.add(eng_chn[1]); } } catch (FileNotFoundException ex) { throw new RuntimeException(ex); } catch (IOException ex) { throw new RuntimeException(ex); } //刷新界面 panel.removeAll();//移除 String word=getWord(); UI.showUI2(word); Font font = new Font("微软雅黑", Font.BOLD, 20); /* JButton jbu = new JButton("hello"); jbu.setBounds(150,170,200,50); jbu.setFont(font); panel.add(jbu); */ //刷新 组件 panel.repaint(); panel.revalidate(); //出题 }

getword函数作用为获取随机单词并挖空,内容如下

public String getWord(){ int size=engList.size(); wordIndex=ran.nextInt(size); String word=engList.get(wordIndex); int word_len=word.length(); int index=ran.nextInt(word_len); c=word.charAt(index); String vword=word.substring(0,index)+"_"+word.substring(index+1,word_len); return vword; }

showUI2函数作用为显示新的标签(挖空单词)、输入框和按钮,代码如下

public void showUI2(String vword) { JLabel jla=new JLabel("请猜出单词缺失的字母"); JLabel jl = new JLabel(vword); JTextField jtf = new JTextField(10); JButton jbu = new JButton("提交"); JButton jbu3 = new JButton("下一个"); Font font = new Font("微软雅黑", Font.BOLD, 20); jl.setFont(font); jtf.setFont(font); jbu.setFont(font); jbu3.setFont(font); jla.setFont(font); jla.setBounds(150,0,300,50); jl.setBounds(150,50,300,50); jtf.setBounds(150,100,200,50); jbu.setBounds(150,200,200,50); jbu3.setBounds(150,150,200,50); panel.add(jla); panel.add(jl); panel.add(jtf); panel.add(jbu); panel.add(jbu3); jbu3.addActionListener(wl); jbu.addActionListener(wl); //将界面的组件对象的地址 传一份给监听器中声明的组件变量名 使得我们点击按钮时可以调用这些组件 设置文本 获取文本 wl.setWordsJla(jl); wl.setChJtf(jtf); }

(tips.由于showUI这里的标签、输入框和按钮需要重复使用,所以需要传到监听类中,方便后续使用、刷新和读取)

其他情况判断如下

else if(s.equals("提交")){ String ch=chJtf.getText(); if (ch.length()==0){ JOptionPane.showMessageDialog(panel,"请输入答案"); return; } char nc=ch.charAt(0); String word=engList.get(wordIndex); String chn=chnList.get(wordIndex); if(c==nc){ JOptionPane.showMessageDialog(panel,"恭喜你,回答正确"+" "+word+" "+chn); }else{ JOptionPane.showMessageDialog(panel,"很抱歉,回答错误"+" "+word+" "+chn); } }else if(s.equals("下一个")){ //下一题 String wordS=getWord(); wordJla.setText(wordS);//显示 chJtf.setText("");//清空 }

三、完整代码(添加了两种模式)

package HolidayMainPackage.day0125; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.util.ArrayList; import java.util.Random; //退出 保存功能(每过五秒自动保存一次) //优化 public class WordsListener implements ActionListener { //绝对路径 //相对路径 ArrayList<String> engList = new ArrayList<>(); ArrayList<String> chnList = new ArrayList<>(); ArrayList<String> transList = new ArrayList<>();//我自己的单词(历史记录) //编号 猜对的次数 单词 中文(写一个单词类把这些属性存入,类似于c语言结构体和结构体数组) JPanel panel; mainV1 UI; JLabel wordJla; JTextField chJtf; Random ran=new Random(); char c; int wordIndex; int pattern; public void setWordsUI(mainV1 ui){ this.UI = ui; this.panel = ui.panel; } public void setWordsJla(JLabel jl) { this.wordJla = jl; } public void setChJtf(JTextField jtf) { this.chJtf = jtf; } @Override public void actionPerformed(ActionEvent e) { String s = e.getActionCommand(); if(s.equals("CET-4")){ //加载四级词库 File file = new File("words/CET-4.txt"); //文件读取 //单个字节 FileReader fr = null; try { fr = new FileReader(file); //读取一行 BufferedReader br = new BufferedReader(fr); while(true){ String line = br.readLine(); if(line==null){ break; } //拆分字符串 String[] eng_chn = line.split("#"); engList.add(eng_chn[0]); chnList.add(eng_chn[1]); } } catch (FileNotFoundException ex) { throw new RuntimeException(ex); } catch (IOException ex) { throw new RuntimeException(ex); } //刷新界面 panel.removeAll();//移除 String word=getWord(); UI.showUI2(word); Font font = new Font("微软雅黑", Font.BOLD, 20); /* JButton jbu = new JButton("hello"); jbu.setBounds(150,170,200,50); jbu.setFont(font); panel.add(jbu); */ //刷新 组件 panel.repaint(); panel.revalidate(); //出题 }else if(s.equals("提交")){ String ch=chJtf.getText(); if (ch.length()==0){ JOptionPane.showMessageDialog(panel,"请输入答案"); return; } if(pattern==0){ pattern1(ch); }else if(pattern==1){ pattern2(ch); }else{ JOptionPane.showMessageDialog(panel,"请选择题库"); } }else if(s.equals("下一个")){ //下一题 pattern= ran.nextInt(3); System.out.println(pattern); if(pattern==0){ panel.removeAll();//移除 String word=getWord(); UI.showUI2(word); }else if(pattern==1){ panel.removeAll();//移除 String word=getChinese(); UI.showUI2(word); System.out.println(pattern); }else{ JOptionPane.showMessageDialog(panel,"请选择题库"); } /*String wordS=getWord(); wordJla.setText(wordS);//显示 chJtf.setText("");//清空 */ // 缺少这两行: panel.revalidate(); panel.repaint(); } } public String getWord(){ int size=engList.size(); wordIndex=ran.nextInt(size); String word=engList.get(wordIndex); int word_len=word.length(); int index=ran.nextInt(word_len); c=word.charAt(index); return word.substring(0,index)+"_"+word.substring(index+1,word_len); } public String getChinese(){ int size=chnList.size(); wordIndex=ran.nextInt(size); return chnList.get(wordIndex); } //字母填空 public void pattern1(String ch){ char nc=ch.charAt(0); String word=engList.get(wordIndex); String chn=chnList.get(wordIndex); if(c==nc){ JOptionPane.showMessageDialog(panel,"恭喜你,回答正确\n"+" "+word+" "+chn); }else{ JOptionPane.showMessageDialog(panel,"很抱歉,回答错误\n"+" "+word+" "+chn); } } public void pattern2(String ch){ String nc=engList.get(wordIndex); String word=engList.get(wordIndex); String chn=chnList.get(wordIndex); if(ch.equals(nc)){ JOptionPane.showMessageDialog(panel,"恭喜你,回答正确\n"+" "+word+" "+chn); }else{ JOptionPane.showMessageDialog(panel,"很抱歉,回答错误\n"+" "+word+" "+chn); } } }
package HolidayMainPackage.day0125; import javax.swing.*; import java.awt.*; import java.util.Random; public class mainV1 { JPanel panel = new JPanel(); WordsListener wl = new WordsListener(); public void showUI() { //wl.setPanel(panel); wl.setWordsUI(this); JFrame jf = new JFrame("背单词"); jf.setTitle("背单词"); jf.setSize(500, 500); jf.setLocationRelativeTo(null);//窗体居中显示到屏幕正中间 jf.setDefaultCloseOperation(3); //jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel.setLayout(null);//没有布局,所有的组件需要自己设置位置和大小 JLabel jl = new JLabel("请选择题库"); JButton jbu = new JButton("CET-4"); JButton jbu2 = new JButton("CET-6"); Font font = new Font("微软雅黑", Font.BOLD, 20); jl.setFont(font); jbu.setFont(font); jbu2.setFont(font); panel.add(jl); panel.add(jbu); panel.add(jbu2); jl.setBounds(150, 100, 200, 50); jbu.setBounds(150, 150, 200, 50); jbu2.setBounds(150, 200, 200, 50); jbu.addActionListener(wl); jbu2.addActionListener(wl); jf.add(panel); jf.setVisible(true); } public void showUI2(String vword) { JLabel jla=new JLabel("请猜出单词缺失的字母"); JLabel jl = new JLabel(vword); JTextField jtf = new JTextField(10); JButton jbu = new JButton("提交"); JButton jbu3 = new JButton("下一个"); Font font = new Font("微软雅黑", Font.BOLD, 20); jl.setFont(font); jtf.setFont(font); jbu.setFont(font); jbu3.setFont(font); jla.setFont(font); jla.setBounds(150,0,300,50); jl.setBounds(150,50,300,50); jtf.setBounds(150,100,200,50); jbu.setBounds(150,200,200,50); jbu3.setBounds(150,150,200,50); panel.add(jla); panel.add(jl); panel.add(jtf); panel.add(jbu); panel.add(jbu3); jbu3.addActionListener(wl); jbu.addActionListener(wl); //将界面的组件对象的地址 传一份给监听器中声明的组件变量名 使得我们点击按钮时可以调用这些组件 设置文本 获取文本 wl.setWordsJla(jl); wl.setChJtf(jtf); } public static void main(String[] args) { mainV1 main = new mainV1(); main.showUI(); } }

(未完,后续会更新V2.0的选择模式和V3.0模式相关记忆功能)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 21:40:42

CGO调用OpenCV实现多角度模板匹配性能分析

在计算机视觉领域&#xff0c;模板匹配作为基础实用的图像处理技术&#xff0c;历经传统方法到深度学习方法的迭代。据国际计算机视觉与模式识别会议&#xff08;CVPR&#xff09;2023年技术趋势报告&#xff0c;传统模板匹配在现代工业视觉检测中仍占38%应用份额&#xff0c;尤…

作者头像 李华
网站建设 2026/6/15 14:06:44

Zookeeper在大数据实时报表系统中的应用

Zookeeper在大数据实时报表系统中的应用 关键词&#xff1a;Zookeeper、大数据、实时报表系统、分布式协调、一致性协议、分布式锁、元数据管理 摘要&#xff1a;本文深入探讨Zookeeper在大数据实时报表系统中的核心应用场景&#xff0c;包括分布式协调、配置管理、集群节点管理…

作者头像 李华
网站建设 2026/6/14 18:38:33

干瞪眼游戏胜率较高的玩法分析

### **干瞪眼游戏胜率较高的玩法分析**在干瞪眼游戏中&#xff0c;玩家需要通过合理出牌、灵活运用牌型和策略性保留关键牌来提高胜率。以下是胜率较高的玩法策略&#xff1a;---#### **1. ** **炸弹的灵活运用** - **核心作用**&#xff1a;炸弹&#xff08;四张相同牌&#x…

作者头像 李华
网站建设 2026/6/15 14:31:45

救命神器10个AI论文平台,专科生毕业论文救星!

救命神器10个AI论文平台&#xff0c;专科生毕业论文救星&#xff01; AI工具助力论文写作&#xff0c;专科生也能轻松应对 随着人工智能技术的不断发展&#xff0c;AI工具已经逐渐成为学术写作中不可或缺的助手。对于许多专科生来说&#xff0c;撰写毕业论文是一项既复杂又耗…

作者头像 李华
网站建设 2026/6/15 12:55:38

从高AI率到轻松通过:5款降重神器详细教程,有效降低AI疑似率!

交论文前最怕什么&#xff1f;肯定不是内容深度不够&#xff0c;而是辛辛苦苦用AI辅助完成的稿件&#xff0c;查重的时候却被标出一片红&#xff0c;AIGC率直接爆表&#xff1f;&#xff01;看着电脑上超高的“AIGC疑似率”真是不知所措&#xff0c;于是开始手动降AI&#xff0…

作者头像 李华