用java代码写一个背单词程序用到io流和图形化界面

时间: 2023-09-07 18:12:07 浏览: 49
好的,下面是一个Java代码示例,实现一个带有IO流和图形化界面的背单词程序: ```java import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Random; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; public class Vocabulary extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private ArrayList<String> words; private ArrayList<String> meanings; private int currentIndex; private int correctCount; private int incorrectCount; private JTextArea wordArea; private JTextField meaningField; private JButton nextButton; private JButton finishButton; public Vocabulary() { super("Vocabulary Quiz"); words = new ArrayList<String>(); meanings = new ArrayList<String>(); currentIndex = 0; correctCount = 0; incorrectCount = 0; JPanel wordPanel = new JPanel(new BorderLayout()); wordPanel.setBorder(BorderFactory.createTitledBorder("Word")); wordArea = new JTextArea(); wordArea.setEditable(false); wordArea.setPreferredSize(new Dimension(300, 80)); wordPanel.add(wordArea, BorderLayout.CENTER); JPanel meaningPanel = new JPanel(new BorderLayout()); meaningPanel.setBorder(BorderFactory.createTitledBorder("Meaning")); meaningField = new JTextField(); meaningField.setPreferredSize(new Dimension(300, 30)); meaningField.addActionListener(this); meaningPanel.add(meaningField, BorderLayout.CENTER); JPanel buttonPanel = new JPanel(new FlowLayout()); nextButton = new JButton("Next"); nextButton.addActionListener(this); finishButton = new JButton("Finish"); finishButton.addActionListener(this); buttonPanel.add(nextButton); buttonPanel.add(finishButton); JPanel statusPanel = new JPanel(new FlowLayout()); JLabel correctLabel = new JLabel("Correct: 0"); JLabel incorrectLabel = new JLabel("Incorrect: 0"); statusPanel.add(correctLabel); statusPanel.add(incorrectLabel); JPanel contentPanel = new JPanel(new BorderLayout()); contentPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); contentPanel.add(wordPanel, BorderLayout.NORTH); contentPanel.add(meaningPanel, BorderLayout.CENTER); contentPanel.add(buttonPanel, BorderLayout.SOUTH); contentPanel.add(statusPanel, BorderLayout.SOUTH); add(contentPanel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setLocationRelativeTo(null); setResizable(false); setVisible(true); } public void loadWords(String fileName) { try { BufferedReader reader = new BufferedReader(new FileReader(fileName)); String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(":"); words.add(parts[0]); meanings.add(parts[1]); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } public void saveResult(String fileName) { try { FileWriter writer = new FileWriter(fileName); writer.write("Correct: " + correctCount + "\n"); writer.write("Incorrect: " + incorrectCount + "\n"); writer.close(); } catch (IOException e) { e.printStackTrace(); } } public void startQuiz() { if (words.size() == 0) { return; } Collections.shuffle(words, new Random()); showNextWord(); } private void showNextWord() { if (currentIndex >= words.size()) { finishQuiz(); return; } wordArea.setText(words.get(currentIndex)); meaningField.setText(""); meaningField.requestFocus(); } private void finishQuiz() { saveResult("result.txt"); wordArea.setText("Congratulations! You have finished the quiz."); meaningField.setEditable(false); nextButton.setEnabled(false); finishButton.setEnabled(false); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == meaningField || e.getSource() == nextButton) { String input = meaningField.getText(); if (input.equalsIgnoreCase(meanings.get(currentIndex))) { currentIndex++; correctCount++; } else { incorrectCount++; } showNextWord(); } else if (e.getSource() == finishButton) { finishQuiz(); } } public static void main(String[] args) { Vocabulary vocabulary = new Vocabulary(); vocabulary.loadWords("words.txt"); vocabulary.startQuiz(); } } ``` 上述代码中,我们借助了Swing框架实现了一个图形化界面。主窗口包含一个单词显示区域和一个文本框,用户需要在文本框中输入对应的意思。 在`loadWords`方法中,我们通过IO流读取一个文件,将其中的单词和意思添加到列表中。在`saveResult`方法中,我们通过IO流将用户的测试结果保存到一个文件中。 在`startQuiz`方法中,我们将单词列表随机打乱,并调用`showNextWord`方法开始测试。在`showNextWord`方法中,我们会依次显示每个单词,并等待用户输入对应的意思。 在`actionPerformed`方法中,我们会处理用户输入的意思,并根据用户的正确与否更新计数器。如果用户点击“Finish”按钮,测试结束,程序会调用`finishQuiz`方法,显示测试结果并将结果保存到文件中。 在`main`方法中,我们创建了一个`Vocabulary`对象,并调用`loadWords`方法读取单词列表文件,最后调用`startQuiz`方法开始背单词。

相关推荐

最新推荐

recommend-type

Java基于IO流读取文件的方法

主要介绍了Java基于IO流读取文件的方法,涉及Java文件流操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
recommend-type

Java中IO流文件读取、写入和复制的实例

下面小编就为大家带来一篇Java中IO流文件读取、写入和复制的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

Java HttpURLConnection超时和IO异常处理

主要介绍了Java HttpURLConnection超时和IO异常处理的相关资料,需要的朋友可以参考下
recommend-type

IO流体系继承结构图_动力节点Java学院整理

Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点: 1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是一套字节输入-输出,字符输入-输出体系 2. 原始处理器(适配器)...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】增量式PID的simulink仿真实现

# 2.1 Simulink仿真环境简介 Simulink是MATLAB中用于建模、仿真和分析动态系统的图形化环境。它提供了一个直观的用户界面,允许用户使用块和连接线来创建系统模型。Simulink模型由以下元素组成: - **子系统:**将复杂系统分解成更小的、可管理的模块。 - **块:**代表系统中的组件,如传感器、执行器和控制器。 - **连接线:**表示信号在块之间的流动。 Simulink仿真环境提供了广泛的块库,涵盖了各种工程学科,包括控制系统、电子和机械工程。它还支持用户自定义块的创建,以满足特定仿真需求。 # 2. Simulink仿真环境的搭建和建模 ### 2.
recommend-type

训练集和测试集的准确率都99%,但是预测效果不好

即使训练集和测试集的准确率都很高,但是在实际的预测中表现不佳,可能会有以下几个原因: 1. 数据质量问题:模型训练和测试的数据可能存在问题,比如数据标签错误、数据集采样不均衡、数据集中存在异常值等问题,这些问题可能会导致模型在实际预测中表现不佳。 2. 特征工程问题:模型的特征工程可能存在问题,导致模型无法很好地捕捉数据的特征,从而影响预测效果。 3. 模型选择问题:模型的选择可能不合适,比如选择的模型太简单,无法很好地拟合数据,或者选择的模型太复杂,导致过拟合等问题。 4. 超参数调整问题:模型的超参数可能没有调整到最佳状态,需要进行调整。 针对以上可能的原因,可以采取相应的措施进
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依