1.首先建立三个类class
第一个ExamJFrame,显示页面
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;
public class ExamJFrame extends JFrame
{
//单选菜单项 简单、一般、困难
JRadioButtonMenuItem itemeasy,itemnormal,itemhard;
JMenuBar jmb;
JMenu jm,jc1,jc2,jc3,jc4;
JMenuItem jmi1;
JPanel jp1;
JLabel jlb;//题目
JRadioButton jr1,jr2,jr3,jr4;//四个选项的按钮
JButton jb1,jb2,jb3;//三个按钮
JPanel jp2;
ButtonGroup bg;
ArrayList list;
Test test; //当前用户做的题
int index;//当前索引值
ExamJFrame(){
setTitle("系统考试");
setBounds(400,300,500,400);
init();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
//点击开始考试,显示面板内容
jmi1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jp1.removeAll();
init2();
list=ExamRead.read("C:\\Users\\zjl\\eclipse-workspace\\实训2\\src\\实训2\\timu.txt"); //调用ExamRead类的Read方法,获取所有题目到集合list中
index=0;
getContent(index);
jb1.setEnabled(false);
jp1.revalidate();
jb3.setEnabled(true);
}
});
}
//设置初始界面
public void init() {
jmb=new JMenuBar();
jm=new JMenu("考试");
jc1=new JMenu("等级");
jc2=new JMenu("帮助");
jc3=new JMenu("退出");
jc4=new JMenu("切换背景颜色");
jmi1=new JMenuItem("开始考试");
itemeasy=new JRadioButtonMenuItem("简单");
itemnormal=new JRadioButtonMenuItem("一般");
itemhard=new JRadioButtonMenuItem("困难");
//为单选菜单分组,实现多选一
ButtonGroup bg=new ButtonGroup();
bg.add(itemeasy);
bg.add(itemnormal);
bg.add(itemhard);
jc1.add(itemeasy);
jc1.add(itemnormal);
jc1.add(itemhard);
jm.add(jmi1);
jmb.add(jm);
jmb.add(jc1);
jmb.add(jc2);
jmb.add(jc3);
jmb.add(jc4);
setJMenuBar(jmb);
jp1=new JPanel();
//设置面板的布局为网格布局,只有一列
jp1.setLayout(new GridLayout(0,1));
add(jp1);
}
public void init2() {
jlb=new JLabel("1关于throws关键字的说明,正确的说法是( )。");
jr1=new JRadioButton("A .throws用于抛出异常");
jr2=new JRadioButton("B .throws用于声明抛出异常");
jr3=new JRadioButton("C .throws 只能声明抛出受检查异常");
jr4=new JRadioButton("D.throws声明抛出的异常都必须捕获处理");
//单选按钮要实现互相排斥,多选-,ButtonGroup按钮组
bg=new ButtonGroup();
bg.add(jr1);
bg.add(jr2);
bg.add(jr3);
bg.add(jr4);
jp2=new JPanel();
jb1=new JButton("上-题");
jb2=new JButton("下一题");
jb3=new JButton("提交");
jp2.add(jb1);
jp2.add(jb2);
jp2.add(jb3);
//中间的大面板jp1添加组件
//滚动条面板添加ilb
jp1.add(new JScrollPane(jlb));
jp1.add(jr1);
jp1.add(jr2);
jp1.add(jr3);
jp1.add(jr4);
jp1.add(jp2);
//上一题按钮的操作
jb1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//保存用户的选项
save(index);
// index要实现减一
index--;
//显示index题的内容到面板
getContent(index);
// 如果已经到第一题,则将上一题按钮设置为不可用
if (index == 0) {
jb1.setEnabled(false);
}
//下一题按钮可用
jb2.setEnabled(true);
}
});
//下一题按钮的操作
jb2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//保存用户的选项
save(index);
// index要实现加一
index++;
getContent(index);
if (index == list.size()-1){
jb2.setEnabled(false);
}
jb1.setEnabled(true);
}
});
//提交按钮的操作
jb3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//最后一道题答案的保存
save(index);
//遍历list集合的每一个元素,判断正确答案和用户答案是否相等,相等给10分
//存分数的变量sum
int sum = 0;
for(int i = 0;i< list.size(); i++){
String zqda = list.get(i).getDa();
String yhda = list.get(i).getUserda();
if (zqda.equals(yhda))
sum += 10;}
JOptionPane.showMessageDialog(null,"你的分数是" + sum);
jb1.setEnabled(false);
jb2.setEnabled(false);
jb3.setEnabled(false);
}
});
}
//读取index题目的内容到面板106
public void getContent(int index) {
// 集合中每一个元素都是一道题,通过get方法获取第index道题,并且放到test对象中
test = list.get(index);
// 把test中对于的成员变量的值在相应组件中显示
jlb.setText((index + 1) +"、" + test.getContent());
jr1.setText("A:"+test.getXx()[0]);
jr2.setText("B:"+test.getXx()[1]);
jr3.setText("C:"+test.getXx()[2]);
jr4.setText("D:"+test.getXx()[3]);
//用户选项选中状态设置
if (test.getUserda() != null)
switch (test.getUserda()) {
case "A":
jr1.setSelected(true);
break;
case "B":
jr2.setSelected(true);
break;
case "C":
jr3.setSelected(true);
break;
case "D":
jr4.setSelected(true);
break;
}
else {
// 如果没有任何选择,把单选按钮恢复都没有选择的状态
bg.clearSelection();
}
}
public void save(int index) {
String userda;
//根据用户选项对userda赋值,保存用户选择的内容
if (jr1.isSelected()){
userda = "A";
} else if (jr2.isSelected()){
userda = "B";
}else if (jr3.isSelected()) {
userda = "C";
} else if (jr4.isSelected()) {
userda = "D";
} else {
userda = "E";
}
test.setUserda(userda);
//System.out.println(test);
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
new ExamJFrame();
}
}
第二个类ExamRead,读取题库
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
/*
* 读取考试内容到集合中
* 集合:ArrayList list
* 1.确定文件位置
* 2.创建读取文件的字符输入流对象
* 3.读取数据到集合
* 4.释放资源
*/
public class ExamRead{
public static ArrayList read(String file){
File f=new File(file);
try {
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr); //字符缓冲输入流,可以实现读取一行信息
String str=br.readLine(); //读取一行信息放到str中
ArrayList list = new ArrayList(); //定义一个集合,存储每一道题
Test test;
while(str!=null && str.length()>0) {
test = new Test(); //初始化test对象
test.setContent(str);
//System.out.println(str); //输出读取的信息
String xx[] = new String[4]; //创建一个存储四个选项的数组
for(int i=0;i<4;i++) {
str=br.readLine();
if(str.indexOf("正确答案")!=-1) {
//i=0 A(65=65+i) i=1 B(66=65+i) i=2 C(67=65+i) i=3D(68)
test.setDa(String.valueOf((char)(i+65)));//循环变量i和选项ABCD之间是否有规律
//去掉正确选项中标识
str=str.replace("(正确答案)","");
}
xx[i]=str;//选项存入xx数组相应元素中
}
test.setXx(xx);//把四个选项的数组赋值给test对象的xx成员变里
//System.out.println(test);
list.add(test);//把一道题添加到集合list中
str=br.readLine();//接下来读取下一题
}
br.close();
fr.close();
return list;
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return null;
}
// public static void main(String[] args){
// read("src\\实训2\\timu.txt");
// }
}
第三个类Test,对照答案
import java.util.Arrays;
/*
“每一道题的实体类Test
“每一题的存储, 一个对象对应一道题Test类
*问题,四个选项,正确答案,用户答案
· 成员变里:String : content 问题
* String[]:xx 四个选项的数组
率 String da: 正确管案
半 S t r i n g u s e r d a :用 户 管 案
*/
public class Test
{
private String content;
private String[] xx=new String[4];
private String da;
private String userda;
public String getContent(){
return content;
}
public void setContent(String content){
this.content=content;}
public String[] getXx(){
return xx;}
public void setXx(String[] xx){
this.xx=xx;}
public String getDa(){
return da;}
public void setDa(String da){
this.da=da;
}
public String getUserda(){
return userda;}
public void setUserda(String userda){
this.userda=userda;}
public String tostring(){
return "Test[content="+content+",xx="+Arrays.toString(xx)+",da="+da+",userda="+userda+"]";
}
}
例图
注意要自己用记事本编写一个题库或者在eclipse内创建一个