news 2026/3/17 5:52:39

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/3/14 7:11:45

1.5万字硬核AI架构指南:从单体智能到系统智能的实战设计

正文开始&#xff1a; 回顾这两年的 AI 发展轨迹&#xff0c;你会发现两条截然不同却又并行不悖的主线&#xff1a; 一条是造脑路线&#xff1a;基础模型层&#xff08;Foundation Models&#xff09;的狂奔&#xff0c;各大厂商拼参数、拼算力&#xff0c;目标是通用人工智能…

作者头像 李华
网站建设 2026/3/13 12:29:38

Agent课题增长200% AICA第九期毕业并累计输送569名AI架构师

1月22日&#xff0c;由百度与深度学习技术及应用国家工程研究中心联合发起的AICA首席AI架构师培养计划&#xff08;以下简称“AICA”&#xff09;第九期毕业典礼在上海成功举办。经过为期8个月的实战培养&#xff0c;来自能源、制造、金融、交通、汽车等18个行业领域的80名学员…

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

4G通信模组和引擎应该怎么用?

在物联网与智能终端设备开发中&#xff0c;4G通信模组与主控引擎&#xff08;如MCU或应用处理器&#xff09;的协同工作是实现远程数据传输与设备联网的核心环节。正确配置通信接口、管理AT指令交互、处理数据收发流程&#xff0c;是确保稳定联网的关键。本文将系统讲解4G模组与…

作者头像 李华
网站建设 2026/3/13 20:28:53

快速上手Mobile库:几行代码搞定移动通信

在面向物联网的移动通信技术中&#xff0c;4G-Cat.1凭借其在性能、功耗与成本之间的优异平衡&#xff0c;已成为中低速连接场景的主流选择。LuatOS提供了Mobile核心库&#xff0c;帮助开发者高效管理设备通信。该库提供简洁易用的API接口&#xff0c;涵盖网络连接、状态监控与高…

作者头像 李华