📄 onlinetest.java
字号:
}
if(start_test){
if(source.equals("previous:")) {
recordanswer();
quesnum--;
if(quesnum == -1) quesnum=TOTAL-1;
checkteststatus();
displayquestion();
}
if(source.equals("next:")) {
recordanswer();
quesnum++;
if(quesnum == TOTAL-1) finishtest=true;
if(quesnum == TOTAL) quesnum=0;
checkteststatus();
displayquestion();
}
if(source.equals("finish:")) {
if (finishtest){
recordanswer();
quesnum = 0;
choice_button[4].setBackground(Color.lightGray);
timecounter.setForeground(Color.blue);
timecounter.setFont(new Font ("Arial",0,14) );
start_test=false;
check_answer=true;
panelSouth.add(choice_button[0]);
mark_ques();
displayquestion();
checkteststatus();
calculateResult();
}
else JOptionPane.showMessageDialog(null,"Cycle through all questions before pressing finish",
"User Message",JOptionPane.INFORMATION_MESSAGE);
}
}
if (check_answer){
if(source.equals("check next:")) {
quesnum++;
if(quesnum == TOTAL) quesnum=0;
mark_ques();
displayquestion();
checkteststatus();
}
if(source.equals("check previous:")) {
quesnum--;
if(quesnum == -1) quesnum=TOTAL-1;
mark_ques();
displayquestion();
checkteststatus();
}
}
validate();
}
/* Timer class */
class Timer extends Thread implements Runnable{
public Timer(){
new Thread(this).start();
}
public void run() {
while(start_test){
try {
Thread.sleep(1000);
seconds++;
if(seconds % 60 == 0 && seconds != 0){
seconds -= 60;
minutes++;
}
timecounter.setText(" Time Counter: "+minutes+" mins : "+seconds+" secs ");
if(minutes==TIMELIMIT){
start_test=false;
endTest();
}
}
catch(InterruptedException ex) { System.out.print(ex); }
}
}
}
/* checkteststatus method */
public void checkteststatus(){
if((quesnum == TOTAL-1)&&(start_test))choice_button[3].setBackground(Color.green);
else choice_button[4].setBackground(Color.lightGray);
if(answers[quesnum].length() >0){
for(int i=0; i<answers[quesnum].length(); i++)
boxes[Integer.parseInt(answers[quesnum].substring(i,i+1) )-1].setSelected (true);
}
else for(int i=0; i<boxes.length; i++)boxes[i].setSelected(false);
}
/* displayquestion method */
public void displayquestion(){
int j = quesnum+1;
pane.setText(QuestionSeries.question[quesnum]);
if(start_test)message.setText("Question "+j+" out of "+TOTAL);
for (int i=0; i<4; i++)answerboxes[i].setText(QuestionSeries.answers[quesnum][i]);
if(start_test){
String temp="";
if(QuestionSeries.n[quesnum]==1) temp="<html> Choose only <b>ONE</b> Option</html>";
else if(QuestionSeries.n[quesnum]==2) temp="<html> Choose <b>TWO </b> Options</html>";
else if(QuestionSeries.n[quesnum]==3) temp="<html> Choose <b>THREE</b> Options</html>";
else temp="<html> <b>ALL are true</b> true</html>";
choose.setText(temp);
}
else {
timecounter.setText(" Your choices are shown in the boxes");
choose.setText(" Correct answers are marked in light red.");
}
}
/* record answer method */
public void recordanswer(){
String tmp = "";
for(int i=0; i<boxes.length; i++) if(boxes[i].isSelected() ) tmp +=i+1;
answers[quesnum] = tmp;
}
/* endTest method */
public void endTest(){
message.setText("TIME OVER: please press 'finish'");
choice_button[2].setEnabled(false);
choice_button[3].setEnabled(false);
choice_button[4].setEnabled(true);
}
/* mark_ques() method to highlight correct answers */
public void mark_ques(){
for(int i=0; i<answerboxes.length; i++) answerboxes[i].setBackground(Color.white);
for(int i=0; i<QuestionSeries.choice[quesnum].length(); i++)
answerboxes[Integer.parseInt(QuestionSeries.choice[quesnum].substring(i,i+1))-1].setBackground(Color.red);
if(QuestionSeries.choice[quesnum].equals(answers[quesnum])) message.setText("Answer correct, well done!");
else message.setText("Sorry, you got this one wrong.");
}
public void calculateResult(){
mark=0;
double temp=0.0;
java.text.DecimalFormat df = new java.text.DecimalFormat("#0.#");
for(int i=0; i<TOTAL; i++)if(QuestionSeries.choice[i].equals(answers[i]))mark++;
temp=(double)mark;
if(temp/TOTAL*100 >=PASS) testresult.setText(" Well done "+studentname.substring(0,studentname.indexOf(' ') )+", you passed");
else testresult.setText(" Better luck next time "+studentname.substring(0,studentname.indexOf(' ') ) );
student.setText(" Final score for "+studentname+": "+mark+" out of "+TOTAL+": "+df.format(temp/TOTAL*100)+"%");
new Resultwindow().show();
}
}
/* Resultwindow class */
class Resultwindow extends JFrame{
Resultwindow() {
super( studentname+" results: " +(mark*100/TOTAL >=PASS?"PASS":"FAIL") );
Container cont = getContentPane();
cont.setLayout(new GridLayout(TOTAL/2+3,5,2,5) );
cont.setBackground(new Color(255,220,255) );
cont.add(new JLabel(" "+"Marks: "+mark+"/"+TOTAL+": "+"Percentage: "+(mark*100/TOTAL)+"%") );
for(int i=0; i<3; i++)cont.add(new JLabel() );
String temp[] = new String[TOTAL];
for(int i=0; i<TOTAL; i++){
if(QuestionSeries.choice[i].equals(answers[i])) temp[i]="correct";
else temp[i]="wrong";
}
for(int i=0; i<TOTAL; i++) cont.add(new JLabel(" Question "+(i+1)+": "+temp [i]) );
pack();
setLocation(200,200);
}
}
/* ItemHandler class */
class ItemHandler implements ItemListener{
public void itemStateChanged(ItemEvent evt){
if(start_test){
for(int i=0; i<boxes.length; i++) if(boxes[i].isSelected() ) itemCheck++;
if(itemCheck > QuestionSeries.n[quesnum]){
java.awt.Toolkit.getDefaultToolkit().beep();
if(QuestionSeries.n[quesnum]==1) JOptionPane.showMessageDialog(null,"<html><font size='4' color='00308a'><center>"+
"There is only "+QuestionSeries.n[quesnum]+" possible<br> answer to question "+(quesnum+1)+
"<html>","User Information Message",JOptionPane.INFORMATION_MESSAGE);
else JOptionPane.showMessageDialog(null,"<html><font size='4' color='00308a'><center>"+
"There are only "+QuestionSeries.n[quesnum]+" possible<br> answers to question "+(quesnum+1)+
"<html>","User Information Message",JOptionPane.INFORMATION_MESSAGE);
}
itemCheck=0;
}
}
}
/* main method */
public static void main(String [] args){
OnlineTest frame = new OnlineTest();
frame.setTitle(" "+QuestionSeries.testtitle);
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -