import java.awt.;

import java.awt.event.;

import javax.swing.*;

//题库

class QuestionBank {

String[] words = {"上午", "中午", "下午", "晚上", "游戏", "事件", "足球", "跑步", "跳", "开心", "篮球"};

String[] correctAns = {"morning", "noon", "afternoon", "evening", "game", "event", "football", "run", "jump",

"happy", "basketball"};

String[][] ans = {{"morning", "event", "afternoon", "football"}, {"basketball", "evening", "event", "noon"},

{"night", "run", "afternoon", "field"}, {"skip", "football", "ship", "evening"},

{"name", "game", "money", "size"}, {"event", "bike", "bus", "end"},

{"baskteball", "football", "volleyball", "jump"}, {"test", "run", "contest", "like"},

{"smile", "much", "jump", "button"}, {"sad", "optimism", "max", "happy"},

{"crew", "java", "football", "basketball"}};

}

//设置测试的面板

class TestPanel extends JPanel implements ActionListener {

public JLabel word, label1, label2,label3; //设置中文单词,已给出的题目数,正确数,剩余时间四个标签

public JRadioButton radio1, radio2, radio3, radio4; //设置四个英文单词解释按钮

private QuestionBank bank; //创建题库对象

public int Num = 1; //已作答题目数变量

public int correctNum = 0; //回答正确题目数变量

public TestPanel(QuestionBank bank) {

super(new BorderLayout());

this.bank = bank;

//设置题目的中文单词

word = new JLabel(bank.words[0]);

word.setFont(new Font("",Font.BOLD,30));

//设置四个单选按钮

//每个按钮均设置对应命令和一定的大小格式

this.radio1 = new JRadioButton(bank.ans[0][0]);

radio1.setActionCommand(bank.ans[0][0]);

radio1.setFont(new Font("",Font.BOLD,15));

this.radio2 = new JRadioButton(bank.ans[0][1]);

radio2.setActionCommand(bank.ans[0][1]);

radio2.setFont(new Font("",Font.BOLD,15));

this.radio3 = new JRadioButton(bank.ans[0][2]);

radio3.setActionCommand(bank.ans[0][2]);

radio3.setFont(new Font("",Font.BOLD,15));

this.radio4 = new JRadioButton(bank.ans[0][3]);

radio4.setActionCommand(bank.ans[0][3]);

radio4.setFont(new Font("",Font.BOLD,15));

//设置单选按钮不透明

radio1.setOpaque(true);

radio2.setOpaque(true);

radio3.setOpaque(true);

radio4.setOpaque(true);

//将单选按钮聚为一组

ButtonGroup group = new ButtonGroup();

group.add(radio1);

group.add(radio2);

group.add(radio3);

group.add(radio4);

//为单选按钮设置事件监听器

radio1.addActionListener(this);

radio2.addActionListener(this);

radio3.addActionListener(this);

radio4.addActionListener(this);

//将按钮添加到一个Panel中

JPanel panel1 = new JPanel(new GridLayout(1, 4));

panel1.add(radio1);

panel1.add(radio2);

panel1.add(radio3);

panel1.add(radio4);

//显示已经给出的题目数量和用户答对数量和剩余时间

label1 = new JLabel("已经给出题目数:" + Num);

label1.setFont(new Font("",Font.BOLD,18));

label2 = new JLabel("答对的题目数:" + correctNum);

label2.setFont(new Font("",Font.BOLD,18));

label3 = new JLabel("剩余时间:3");

label3.setFont(new Font("",Font.BOLD,18));

//将标签添加到一个Panel中

JPanel panel2 = new JPanel(new GridLayout(1,3));

panel2.add(label1);

panel2.add(label2);

panel2.add(label3);

//将所有组件放在该对象中

this.add(panel1, BorderLayout.CENTER);

this.add(word, BorderLayout.NORTH);

this.add(panel2, BorderLayout.SOUTH);

}

//按钮被选中处理方法

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand() == bank.correctAns[Num-1]) {        //如果正确,则答对数目加一,并改变回答正确数目的标签

correctNum++;

label2.setText("答对的题目数:" + correctNum);

}

}

}

public class WordTest extends JFrame implements Runnable {

private JFrame frame = new JFrame("单机版中英文单词测试程序"); //创建窗口

private QuestionBank bank = new QuestionBank();

private TestPanel testPanel = new TestPanel(bank); //创建测试面板

public Thread t = new Thread(this);

public void CreateJFrame() {

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//获取内容区并设置布局

Container pane = frame.getContentPane();

pane.setLayout(new BorderLayout());

//设置内容区

frame.setContentPane(testPanel);

//为四个按钮添加鼠标事件

testPanel.radio1.addMouseListener(new MouseListenner());

testPanel.radio2.addMouseListener(new MouseListenner());

testPanel.radio3.addMouseListener(new MouseListenner());

testPanel.radio4.addMouseListener(new MouseListenner());

//设置大小并显示窗口

frame.setSize(550,550);

frame.setVisible(true);

giveTest();

}

public void giveTest() {                            //启动输出题目线程

t.start();

}

public void run() {

for (int i = 1; i < bank.words.length+1; i++) {

//三秒倒计时,倒计时内不作答则输出下一道题

int t = 3;

while (t>0) {

testPanel.label3.setText("剩余时间:"+t);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

break;

}

t--;

}

//如果所有题目完成,则弹出对话框显示题目数和正确数两个信息

if (i==bank.words.length) {

JOptionPane.showMessageDialog(this,"测试完成,

本次测试完成" + testPanel.Num +

"题,答对" + testPanel.correctNum + "题。");

break;

}

//每次循环给出新的题目和新的选项

testPanel.word.setText(bank.words[i]);

testPanel.Num++;

testPanel.label1.setText("已经给出题目数:" + testPanel.Num);

testPanel.radio1.setText(bank.ans[i][0]);

testPanel.radio1.setActionCommand(bank.ans[i][0]);

testPanel.radio2.setText(bank.ans[i][1]);

testPanel.radio2.setActionCommand(bank.ans[i][1]);

testPanel.radio3.setText(bank.ans[i][2]);

testPanel.radio3.setActionCommand(bank.ans[i][2]);

testPanel.radio4.setText(bank.ans[i][3]);

testPanel.radio4.setActionCommand(bank.ans[i][3]);

}

}

class MouseListenner implements MouseListener {

@Override

public void mouseClicked(MouseEvent e) {

//如果点击单选按钮回答题目则立即中断输出题目线程的睡眠以立即显示下一题

if(e.getButton() == MouseEvent.BUTTON1) {

t.interrupt();

}

}

@Override

public void mousePressed(MouseEvent e) {

}

@Override

public void mouseReleased(MouseEvent e) {

}

@Override

public void mouseEntered(MouseEvent e) {

}

@Override

public void mouseExited(MouseEvent e) {

}

}

public static void main(String[] args) {

new WordTest().CreateJFrame();

}

}

运行结果如下:

QQ图片20191130000835.png

java questionbank_一个小小的单机英语测试程序(Java)相关推荐

  1. 用JAVA写一个画图小程序(JAVA 大作业)

    第一次写博客 且是稍微大点的程序 看看就行 重新写的在这,更加清晰明了:点击进入:用JAVA写一个画图小程序(JAVA 大作业)重排版本 设计思路 首先我直接去了Windows自带画图程序去实践模拟, ...

  2. java遍历一个类的属性名,java遍历对象属性

    java对象动态添加属性,Class对象和Java反射机制,java遍历对象属性,js对象动态添加属性 java 对象动态添加属性,Class对象和Java反射机制,java遍历对象属性,js对象动态 ...

  3. java设计一个user类_关于JAVA设计一个用户类

    关于JAVA设计一个用户类 关注:152  答案:2  mip版 解决时间 2021-02-02 05:51 提问者安分守己的小青春 2021-02-02 02:23 设计一个用户类,该类有用户编号. ...

  4. java设计一个查询模块_采用Java实现的汉语拼音查询模块

    0引言现有管理信息系统的数据库中存储了大量的中文信息,中文信息的检索是MIS的重要功能,对于中文字段的常见查询方法是输入汉字字符串,但是此方法需要过多的击键次数,例如,查询人名为"王晓明&q ...

  5. java新建一个女朋友_详解java创建一个女朋友类(对象啥的new一个就是)==建造者模式,一键重写...

    创建一个女朋友,她有很多的属性,比如:性别,年龄,身高,体重,类型等等,虽然每个女朋友都有这些属性,但是每个人找女朋友的要求都是不一样的,有的人喜欢男的,有的人喜欢女的,有的喜欢胖的,不同的人可以根据 ...

  6. java新建一个女朋友_详解java创建一个女朋友类(对象啥的new一个就是)==建造者项目,傻瓜式一键重写...

    创建一个女朋友,她有很多的属性,比如:性别,年龄,身高,体重,类型等等,虽然每个女朋友都有这些属性,但是每个人找女朋友的要求都是不一样的,有的人喜欢男的,有的人喜欢女的,有的喜欢胖的,不同的人可以根据 ...

  7. java现有一个泛型类 提供数组排序功能,java编程思想读书笔记 第十六章 数组

    数组,你可以创建并组装它们,通过使用整型索引值访问它们的元素,并且它们的尺寸不能改变. 1.数组为什么特殊 数组与其他种类的容器之间的区别有三方面:效率.类型和保存基本类型的能力.在Java中数组是一 ...

  8. java实现一个跳转结构程序,Java程序设计基础(第6版)最新章节_鲜征征著_得间小说...

    4.3 分支结构 分支结构又称为选择结构,是一种在两种以上的多条执行路径中选择一条执行的控制结构,这里所说的执行路径是指一组语句.通常分支结构要先做一个判断,然后根据判断的结果来决定选择哪一条执行路径 ...

  9. java 复制一个数组_浅谈Java中复制数组的方式

    在Java里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组:如果一个数组发生改变,那么引用同 ...

最新文章

  1. java变量存储位置_java 中变量存储位置的区别
  2. java内存泄露分析方案
  3. BERT重计算:用22.5%的训练时间节省5倍的显存开销(附代码)
  4. 前端笔记-使用vue-cli(脚手架)开发TodoList
  5. Spark Shuffle详解剖析
  6. 关于CCS软件的Graph功能使用详解
  7. C++ 句柄类的原理以及设计
  8. android 哈哈镜,Carnival Mirror App(哈哈镜模拟器)
  9. 天翎开源,是一种技术,更是一种信仰
  10. 六、v4l2 ctrl 函数初始化---增加自定义接口v4l2_ctrl_new_custom
  11. Cannot open precompiled header file: 'Debug/****.pch': No such file or directory
  12. TSF微服务治理实战系列(二)——服务路由
  13. SpringBoot——@ConfigurationProperties注解
  14. 97年的欧冠决赛 多特蒙德VS尤文 中里德尔的梦
  15. 怎么重置imac_[pc玩家]如何重置Mac电脑到出厂状态
  16. UIWebView原生跳转界面PUSH POP
  17. spring boot在启动程序之前执行逻辑
  18. 对接腾讯企业邮箱(授权免登,获取未读邮件数量)
  19. 银河计算机网络,python学习笔记
  20. 恋练有词重点单词快速识记

热门文章

  1. 【ZZULIOJ】1112: 进制转换(函数专题)
  2. 打印机配置,关于打印时候显示“错误-正在打印”
  3. MatConvNet配置详解,吐血整理Win10+MATLAB2019a+VS2015+cuda11.0
  4. android10系统是平板电脑吗,Windows 10适用于Android平板电脑
  5. value-format=yyyy-MM-dd HH:mm:ss
  6. 谈绿色溢价的时代发展与建筑节能指导
  7. 3DMAX车缝线生成器插件使用方法详解
  8. 2019《财富》世界500强公布:华为第61 京东排名第139
  9. matlab画椭圆抛物面参数方程,椭圆抛物面 - calculus的日志 - 网易博客
  10. MATLAB—绘制椭圆