?? exammainframe.java
字號:
package exam.gui;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import exam.web.ExamClient;
/**
* 考試主界面
*
* @author 董曉煒
*
*/
public class ExamMainFrame {
private int i;//試卷的剩余題數
private int m;//現在是第幾題
private boolean isEnd=false;
private ExamClient ec;
private JFrame jf;
private JLabel jl1, jl2;
// private JRadioButton[] jrbs = new JRadioButton[5];
private JTextField jtf;
private JButton jb1, jb2, jb3;
private JPanel center;
private QuestionPanel[] qps;//試卷面板的數組
private JScrollPane[] jsp;
private String[] studentAnswer;
private int score=0;
private boolean isStop=false;
public ExamMainFrame(ExamClient ec1) {
this.ec = ec1;
i=ec.getPaper().getQs().size()-1;
m=1;
qps=new QuestionPanel[i+1];
jsp=new JScrollPane[i+1];
for(int j=0;j<qps.length;j++){
qps[j]=new QuestionPanel(ec.getPaper().getQs().get(j));
jsp[j]=new JScrollPane(qps[j]);
}
studentAnswer=new String[i+1];
center = new JPanel();
jf = new JFrame("達內考試系統-" + ec.getCourse().getCourseName());
jl1 = new JLabel("剩余試題" +i);
jl2 = new JLabel("剩余時間" +(i+1)+ ":00");
// for (int i = 0; i < jrbs.length; i++) {
// jrbs[i] = new JRadioButton((char) (i + 65) + "");
// }
jtf=new JTextField(7);
jb1 = new JButton("上一題");
jb2 = new JButton("下一題");
jb3 = new JButton("交卷");
init();
addEventHandler();
new Thread(){
public void run(){
while(true){
try {
isStop=ec.stop();
} catch (IOException e) {
isStop=true;
return;
}
if(isStop){
jf.setVisible(false);
}
if(!isStop){
jf.setVisible(true);
}
}
}
}.start();
new Thread() {
public void run() {
int second = 0;
int mintue = (i+1)*3/2;
while(true) {
if(isStop){
continue;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(mintue==0&&second==0){
jl2.setText("剩余時間00:00");
if(isEnd)return;
putStudentAnswer();
char sco=CountScore();
jb3.setEnabled(false);
JOptionPane.showMessageDialog(jf, "考試結束! "+ec.getStudent().getName()+" 對的題數為"+score/10+" 級別為"+sco);
ec.send(sco,score);
ec.close();
return;
}
if (second == 0) {
second = 60;
mintue--;
}
second--;
if (mintue < 10 && second >= 10) {
jl2.setText("剩余時間0" + (mintue) + ":" + second);
continue;
} else if (mintue >= 10 && second < 10) {
jl2.setText("剩余時間"+(mintue) + ":0" + second);
continue;
} else if(mintue<10&&second<10){
jl2.setText("剩余時間0" +( mintue) + ":0" + second);
continue;
}else{
jl2.setText("剩余時間"+(mintue)+":"+second);
}
}
}
}.start();
showMe();
}
private void showMe(){
jf.setSize(1000,700);
jf.setLocation(0, 200);
jf.setResizable(false);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}
private void addEventHandler(){
jb1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(i==ec.getPaper().getQs().size()-2){
putStudentAnswer();
jb1.setEnabled(false);
jb2.setEnabled(true);
QuestionBefored();
return;
}
putStudentAnswer();
jb2.setEnabled(true);
QuestionBefored();
}
});
jb2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(i==1){
putStudentAnswer();
jb2.setEnabled(false);
jb1.setEnabled(true);
QuestionAftered();
return;
}
putStudentAnswer();
jb1.setEnabled(true);
QuestionAftered();
}
});
jb3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
putStudentAnswer();
isEnd=true;
char sco=CountScore();
jb3.setEnabled(false);
JOptionPane.showMessageDialog(jf, "考試結束! "+ec.getStudent().getName()+" 對的題數為"+score/10+" 級別為"+sco);
ec.send(sco,score);
ec.close();
}
});
jf.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent arg0) {
ec.close();
System.exit(0);
}
});
}
private void init() {
if(i==0){jb2.setEnabled(false);jb1.setEnabled(false);}
JLabel jl3 = new JLabel("歡迎進入達內考試系統");
jl3.setFont(new Font("宋體", Font.BOLD, 22));
JLabel jl4 = new JLabel("考生編號 " + ec.getStudent().getId() + " 考生姓名 "
+ ec.getStudent().getName() + " 考試科目 "
+ ec.getCourse().getCourseName());
JPanel north = new JPanel();
center.setLayout(new BorderLayout());
JPanel jp = new JPanel();
// ButtonGroup bg = new ButtonGroup();
JLabel jl5 = new JLabel("請寫答案(一個或多個答案):");
jp.add(jl5);
// for (int i = 0; i < jrbs.length - 1; i++) {
// bg.add(jrbs[i]);
// jp.add(jrbs[i]);
// }
// bg.add(jrbs[4]);
// jrbs[4].doClick();
jp.add(jtf);
jp.add(jb1);
jb1.setEnabled(false);
jp.add(jb2);
jp.add(jb3);
center.add(jp, BorderLayout.SOUTH);
center.add(jsp[m-1],BorderLayout.CENTER);
north.add(jl3);
north.add(jl4);
jf.add(north, BorderLayout.NORTH);
jf.add(center,BorderLayout.CENTER);
jf.add(jl1, BorderLayout.WEST);
jf.add(jl2, BorderLayout.EAST);
}
private void putStudentAnswer(){//把學生的答案寫入數組中
// for(int j=0;j<jrbs.length;j++){
// if(jrbs[j].isSelected()){
// studentAnswer[ec.getPaper().getQs().size()-i-1]=jrbs[j].getText();
// break;
// }
// }
String answer=jtf.getText().trim();
studentAnswer[m-1]=answer;
}
private void QuestionBefored(){//上一題時試題面板的變化
center.remove(jsp[m-1]);
center.add(jsp[m-2],BorderLayout.CENTER);
// for(int j=0;j<jrbs.length;j++){
// if(jrbs[j].getText().equals(studentAnswer[ec.getPaper().getQs().size()-i-1])){
// jrbs[j].doClick();
// }
// }
jtf.setText(studentAnswer[m-2]);
center.repaint();
i++;
jl1.setText("剩余試題"+i);
m--;
}
private void QuestionAftered(){//下一題時試題面板的變化
center.remove(jsp[m-1]);
center.add(jsp[m],BorderLayout.CENTER);
if(studentAnswer[m]!=null)jtf.setText(studentAnswer[m]);
else{jtf.setText("");}
// jrbs[4].doClick();
// else{
// for(int i=0;i<jrbs.length;i++){
// if(jrbs[i].getText().equals(studentAnswer[ec.getPaper().getQs().size()-i-1])){
// jrbs[i].doClick();
// break;
// }
// }
// }
center.repaint();
i--;
jl1.setText("剩余試題"+i);
m++;
}
private boolean compare(String a,String b){
String s=a.toUpperCase();
String r=b.toUpperCase();
char[] ss=s.toCharArray();
char[] rr=r.toCharArray();
int scount=0;
int rcount=0;
for(int i=0;i<ss.length;i++){
if(ss[i]==32)continue;
else if(ss[i]<65&&ss[i]>90) break;
scount+=ss[i];
}
for(int i=0;i<rr.length;i++){
rcount+=rr[i];
}
if(scount==rcount)return true;
return false;
}
private char CountScore(){
String[] rightAnswer=ec.getPaper().getRightAnswers();
int Score=0;
for(int i=0;i<rightAnswer.length;i++){
if(studentAnswer[i]==null)continue;
// System.out.println(studentAnswer[i]+":"+rightAnswer[i]);
if(compare(studentAnswer[i],rightAnswer[i])){
Score+=10;
}
}
score=Score;
switch(Score/ec.getPaper().getQs().size()){
case 10:
case 9:return 'A';
case 8:
case 7:return 'B';
case 6:
case 5:return 'C';
default: return 'D';
}
}
//public static void main(String[] args){
// char[] ss={'a','b','c'};
// char[] rr={'c','a','b'};
// char[] dd={'f','a','b'};
// System.out.println((int)(ss[0]+ss[1]+ss[2]));
// System.out.println((int)(rr[0]+rr[1]+rr[2]));
// System.out.println((int)(dd[0]+dd[1]+dd[2]));
//}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -