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(linenull){ 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 wordgetWord(); 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 sizeengList.size(); wordIndexran.nextInt(size); String wordengList.get(wordIndex); int word_lenword.length(); int indexran.nextInt(word_len); cword.charAt(index); String vwordword.substring(0,index)_word.substring(index1,word_len); return vword; }showUI2函数作用为显示新的标签挖空单词、输入框和按钮代码如下public void showUI2(String vword) { JLabel jlanew 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 chchJtf.getText(); if (ch.length()0){ JOptionPane.showMessageDialog(panel,请输入答案); return; } char ncch.charAt(0); String wordengList.get(wordIndex); String chnchnList.get(wordIndex); if(cnc){ JOptionPane.showMessageDialog(panel,恭喜你回答正确 word chn); }else{ JOptionPane.showMessageDialog(panel,很抱歉回答错误 word chn); } }else if(s.equals(下一个)){ //下一题 String wordSgetWord(); 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 { //绝对路径 //相对路径 ArrayListString engList new ArrayList(); ArrayListString chnList new ArrayList(); ArrayListString transList new ArrayList();//我自己的单词历史记录 //编号 猜对的次数 单词 中文(写一个单词类把这些属性存入类似于c语言结构体和结构体数组) JPanel panel; mainV1 UI; JLabel wordJla; JTextField chJtf; Random rannew 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(linenull){ 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 wordgetWord(); 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 chchJtf.getText(); if (ch.length()0){ JOptionPane.showMessageDialog(panel,请输入答案); return; } if(pattern0){ pattern1(ch); }else if(pattern1){ pattern2(ch); }else{ JOptionPane.showMessageDialog(panel,请选择题库); } }else if(s.equals(下一个)){ //下一题 pattern ran.nextInt(3); System.out.println(pattern); if(pattern0){ panel.removeAll();//移除 String wordgetWord(); UI.showUI2(word); }else if(pattern1){ panel.removeAll();//移除 String wordgetChinese(); UI.showUI2(word); System.out.println(pattern); }else{ JOptionPane.showMessageDialog(panel,请选择题库); } /*String wordSgetWord(); wordJla.setText(wordS);//显示 chJtf.setText();//清空 */ // 缺少这两行 panel.revalidate(); panel.repaint(); } } public String getWord(){ int sizeengList.size(); wordIndexran.nextInt(size); String wordengList.get(wordIndex); int word_lenword.length(); int indexran.nextInt(word_len); cword.charAt(index); return word.substring(0,index)_word.substring(index1,word_len); } public String getChinese(){ int sizechnList.size(); wordIndexran.nextInt(size); return chnList.get(wordIndex); } //字母填空 public void pattern1(String ch){ char ncch.charAt(0); String wordengList.get(wordIndex); String chnchnList.get(wordIndex); if(cnc){ JOptionPane.showMessageDialog(panel,恭喜你回答正确\n word chn); }else{ JOptionPane.showMessageDialog(panel,很抱歉回答错误\n word chn); } } public void pattern2(String ch){ String ncengList.get(wordIndex); String wordengList.get(wordIndex); String chnchnList.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 jlanew 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模式相关记忆功能

相关新闻

后端开发效率翻倍:IntelliJ IDEA的5个“神级插件

后端开发效率翻倍:IntelliJ IDEA的5个“神级插件

一、GitToolBox:Git协作效率加速器功能概述:增强IDEA原生Git功能,将版本控制操作无缝集成到IDE中,避免频繁切换命令行。 核心作用:实时Blame信息:点击代码行右侧显示最近修改者、提交时间和摘要&#xff0c…

2026/7/7 12:46:50 阅读更多 →
Photoshop CS6 精简绿色版Photoshop CS6 精简绿色版分享

Photoshop CS6 精简绿色版Photoshop CS6 精简绿色版分享

下载链接Photoshop CS6 精简绿色版 链接:https://pan.quark.cn/s/35e0b2cbe809 4:/^tX0KdDR5jR^%第二步:双击exe文件打开即可\n三:软件介绍\n\n\n原版安装复杂、占满 C 盘,新版要求高配置带不动?今天给大家安排一款「…

2026/7/6 1:10:25 阅读更多 →
CGO调用OpenCV实现多角度模板匹配性能分析

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

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

2026/7/6 16:15:32 阅读更多 →

最新新闻

YOLOv8道路坑洼识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置+目标检测)

YOLOv8道路坑洼识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置+目标检测)

摘要 本研究设计并实现了一套基于YOLOv8(You Only Look Once version 8)目标检测算法的道路坑洼智能识别检测系统。该系统以YOLOv8s作为基础检测模型,在包含3,490张标注图像的自建道路坑洼数据集上进行训练、验证与测试,其中训练…

2026/7/7 12:45:38 阅读更多 →
思源宋体TTF终极指南:7个字重免费商用字体如何提升你的设计效率

思源宋体TTF终极指南:7个字重免费商用字体如何提升你的设计效率

思源宋体TTF终极指南:7个字重免费商用字体如何提升你的设计效率 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找专业中文字体而烦恼版权问题吗&#xff…

2026/7/7 12:43:37 阅读更多 →
博客摘录「 串口通信基础(一)——串行与并行通信,同步与异步通信」2026年7月6日

博客摘录「 串口通信基础(一)——串行与并行通信,同步与异步通信」2026年7月6日

串口通信中比较重要的参数包括波特率、数据位、停止位及校验位 串行通信与并行通信,当传输1字节(bite)信息时,并行通讯有8根信号线实现同时传输,假如耗时为1T,而串行是在一根信号线上,把数据排…

2026/7/7 12:43:37 阅读更多 →
Minecraft基岩版启动器实战:全方位管理多个游戏版本与个性化配置

Minecraft基岩版启动器实战:全方位管理多个游戏版本与个性化配置

Minecraft基岩版启动器实战:全方位管理多个游戏版本与个性化配置 【免费下载链接】BedrockLauncher 项目地址: https://gitcode.com/gh_mirrors/be/BedrockLauncher Bedrock Launcher是一款专为Minecraft基岩版设计的开源启动器,它为玩家提供了强…

2026/7/7 12:41:36 阅读更多 →
选物理可以报哪些大数据相关专业

选物理可以报哪些大数据相关专业

一、物理选科可填报的核心大数据相关专业 新高考绝大多数大数据类专业硬性首选物理,搭配化学可解锁全部院校报考权限,仅选物理也能覆盖九成以上志愿选项。 数据科学与大数据技术(工学):大数据领域最主流专业&#xff0…

2026/7/7 12:39:35 阅读更多 →
2026年7月4日(周六)| 下半年备考倒计时 **112天** | 基础精读第5天

2026年7月4日(周六)| 下半年备考倒计时 **112天** | 基础精读第5天

软考软件设计师 每日考点推送 📅 2026年7月4日(周六)| 下半年备考倒计时 112天 | 基础精读第5天 一、今日头条:2026下半年备考三大战略调整(搜狐6/17最新分析) 基于2026上半年真题复盘,下半年…

2026/7/7 12:39:35 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻