1.每个问题提供ABCD四个选择(单选)
2.两个问题之间是用减号(-)尾加前一问题的答案分隔(如:----D----)
public class Example{
public static void main(String[] args) {
StandardExamInTime win = new StandardExamInTime();
win.setTitle("限时回答问题");
win.setTestFile(new java.io.File("test.txt"));
win.setMAX(8);
}
}
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class StandardExamInTime extends JFrame implements ActionListener,ItemListener {
File testFile;
int MAX = 8;
int maxTime = MAX,score=0;
javax.swing.Timer time;//计时器
JTextArea showQuesion;//显示试题
JCheckBox choiceA,choiceB,choiceC,choiceD;
JLabel showScore,showTime;
String correctAnswer;//正确答案
JButton reStart;
FileReader inOne;
BufferedReader inTwo;
StandardExamInTime(){
time = new javax.swing.Timer(1000,this);
showQuesion = new JTextArea(2,16);
setLayout(new FlowLayout());
showScore = new JLabel("分数"+score);
showTime = new JLabel(" ");
add(showTime);
add(new JLabel("问题:"));
add(showQuesion);
choiceA = new JCheckBox("A");
choiceB = new JCheckBox("B");
choiceC = new JCheckBox("C");
choiceD = new JCheckBox("D");
choiceA.addItemListener(this);
choiceB.addItemListener(this);
choiceC.addItemListener(this);
choiceD.addItemListener(this);
add(choiceA);
add(choiceB);
add(choiceC);
add(choiceD);
add(showScore);
reStart = new JButton("再做一遍");
reStart.setEnabled(false);
add(reStart);
reStart.addActionListener(this);
setBounds(100,100,200,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void setMAX(int n){
MAX = n;
}
public void setTestFile(File f){
testFile = f;
score = 0;
try{
inOne = new FileReader(testFile);
inTwo = new BufferedReader(inOne);
readOneQuesion();
reStart.setEnabled(false);
}
catch(IOException exp){
showQuesion.setText("没有选题");
}
}
public void readOneQuesion(){
showQuesion.setText(null);
try{
String s = null;
while((s = inTwo.readLine())!=null){
if(!s.startsWith("-"))
showQuesion.append("\n"+s);
else{
s = s.replaceAll("-", "");
correctAnswer = s;
break;
}
}
time.start();//启动计时
if(s==null){
inTwo.close();
reStart.setEnabled(true);
showQuesion.setText("题目完毕");
time.stop();
}
}
catch(IOException exp){}
}
public void itemStateChanged(ItemEvent e){
JCheckBox box = (JCheckBox)e.getSource();
String str = box.getText();
boolean booOne = box.isSelected();
boolean booTwo = str.compareToIgnoreCase(correctAnswer)==0;
if(booOne&&booTwo){
score++;
showScore.setText("分数:"+score);
time.stop();//停止计时
maxTime = MAX;
readOneQuesion();//读入下一题目
}
box.setSelected(false);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==time){
showTime.setText("剩:"+maxTime+"秒");
maxTime--;
if(maxTime <= 0){
maxTime = MAX;
readOneQuesion();//读入下一题目
}
}
else if(e.getSource()==reStart){
setTestFile(testFile);
}
}
}
注:
1.本题使用了GUI界面,增加了计时器线程。
2.必须在8秒内回答,若超过,则进入下一题
3.问题保存在test.txt文件中,这里没有提供,可自行添加。