?? exammainframe.java
字號:
package exam.gui;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.*;
import java.util.Timer;
import javax.swing.*;
import exam.dao.ScoreDao;
import exam.model.Paper;
import exam.model.Question;
import exam.model.Student;
/**
* 考試主界面
* @author teacher
*
*/
public class ExamMainFrame extends JFrame implements ScoreDao{
private Student student;
private Paper paper;
private QuestionPanel qPanel;
private JLabel jlWelcome;
private JLabel stuID;
private JLabel stuName;
private JLabel sbjName;
private JLabel jlRNumDesc;
private JLabel jlRNum;
private int num;
private JLabel jlRTimeDesc;
private JLabel jlRTime;
private int time;
private Timer timer;
private JLabel jlSlcDesc;
private JRadioButton[] option;
private JButton jbPre;
private JButton jbNext;
private JButton jbCarryOut;
private int score;
private ButtonGroup bg;
private Socket s;
private PrintWriter pw;
public ExamMainFrame(Student student,Paper paper,Socket s ,PrintWriter pw){
this.s = s;
this.pw = pw;
Font font = new Font("宋體",Font.BOLD,30);
this.setTitle("歡迎進入達內考試系統(tǒng)--"+paper.getName());
this.student = student;
this.paper = paper;
jlWelcome = new JLabel("歡迎進入達內考試系統(tǒng)");
jlWelcome.setFont(font);
stuID = new JLabel(" 學生編號 : "+student.getId());
stuName = new JLabel(" 學生姓名 : "+student.getName());
sbjName = new JLabel(" 考試科目 : "+paper.getName());
jlRNumDesc = new JLabel("剩余試題: ");
num = 0;
jlRNum = new JLabel(""+(paper.getQuestions().length - num -1));
jlRNum.setFont(font);
qPanel = new QuestionPanel();
qPanel.displayQuestion(num + 1, paper.getQuestions()[num]);
time = 20*60;
jlRTimeDesc = new JLabel("剩余時間: ");
jlRTime = new JLabel(""+time/60+":"+time%60);
jlRTime.setFont(font);
timer = new Timer();
timer.scheduleAtFixedRate(new MyTimerTask(), 0, 1000);
jlSlcDesc = new JLabel("請選擇:");
option = new JRadioButton[4];
bg = new ButtonGroup();
for(int i=0;i<4;i++){
option[i] = new JRadioButton(""+(char)('A'+i));
bg.add(option[i]);
}
jbPre = new JButton("<<上一題");
jbPre.setEnabled(false);
jbNext = new JButton(">>下一題");
jbCarryOut = new JButton("交卷");
score = 0;
init();
addEventHandle();
}
private void init(){
JPanel jp1 = new JPanel();
jp1.add(jlWelcome);
jp1.add(stuID);
jp1.add(stuName);
jp1.add(sbjName);
JPanel jp2 = new JPanel(new BorderLayout());
JPanel jp2a = new JPanel();
jp2a.add(jlRNumDesc);
JPanel jp2b = new JPanel();
jp2b.add(jlRNum);
jp2.add(jp2a,BorderLayout.NORTH);
jp2.add(jp2b,BorderLayout.CENTER);
JPanel jp3 = new JPanel();
jp3.add(qPanel);
JPanel jp4 = new JPanel(new BorderLayout());
JPanel jp4a = new JPanel();
jp4a.add(jlRTimeDesc);
JPanel jp4b = new JPanel();
jp4b.add(jlRTime);
jp4.add(jp4a,BorderLayout.NORTH);
jp4.add(jp4b,BorderLayout.CENTER);
JPanel jp5 = new JPanel();
jp5.add(jlSlcDesc);
for(int i=0;i<4;i++){
jp5.add(option[i]);
}
jp5.add(jbPre);
jp5.add(jbNext);
jp5.add(jbCarryOut);
this.setLayout(new BorderLayout());
this.add(jp1,BorderLayout.NORTH);
this.add(jp2,BorderLayout.WEST);
this.add(jp3,BorderLayout.CENTER);
this.add(jp4,BorderLayout.EAST);
this.add(jp5,BorderLayout.SOUTH);
}
private void addEventHandle(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jbNext.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jbPre.setEnabled(true);
addAnswer(num);
num++;
qPanel.displayQuestion(num+1, paper.getQuestions()[num]);
jlRNum.setText(""+(paper.getQuestions().length - num - 1));
if(num+1 == paper.getQuestions().length){
jbNext.setEnabled(false);
}
bg.clearSelection();
}
});
jbPre.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jbNext.setEnabled(true);
addAnswer(num);
num--;
qPanel.displayQuestion(num + 1, paper.getQuestions()[num]);
jlRNum.setText(""+(paper.getQuestions().length - num -1));
if(num == 0){
jbPre.setEnabled(false);
}
bg.clearSelection();
}
});
jbCarryOut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(num < paper.getQuestions().length - 1){
int op = JOptionPane.showConfirmDialog(ExamMainFrame.this,"您還有"+(paper.getQuestions().length - num -1)+"題未完成,確認提交嗎?", "確認交卷",JOptionPane.YES_NO_OPTION);
if(op == JOptionPane.YES_OPTION){
addAnswer(num);
num++;
checkAnswer();
addScore(student.getId(), score, paper.getName());
System.exit(0);
}
}else{
int op = JOptionPane.showConfirmDialog(ExamMainFrame.this,"您確認要提交試卷嗎?", "確認交卷",JOptionPane.YES_NO_OPTION);
if(op == JOptionPane.YES_OPTION){
jbCarryOut.setEnabled(false);
addAnswer(num);
num++;
checkAnswer();
String str = "%ADD_SCORE%:"+student.getId()+":"+score+":"+paper.getName();
// addScore(student.getId(), score, paper.getName());
try {
pw.println(str);
pw.flush();
System.out.println("added score" + str);
pw.close();
s.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.exit(0);
}
}
}
});
}
private void addAnswer(int num){
for(int i=0;i<option.length;i++){
if(option[i].isSelected()){
paper.setAnswerSheet(num,(char)(i+'A'));
// System.out.println((num+1)+" "+(char)(i+'A'));
}
}
}
private void checkAnswer(){
for(int i=0;i<paper.getQuestions().length;i++){
if(paper.getQuestions()[i].getTrueOption() == paper.getAnswerSheet()[i]){
score++;
}
}
}
public void showMe(){
this.setSize(800,600);
this.setLocation(this.getToolkit().getScreenSize().width/2-this.getWidth()/2,this.getToolkit().getScreenSize().height/2-this.getHeight()/2);
this.setResizable(false);
this.setVisible(true);
}
public static void main(String[] args) {
Student student = new Student(1001,"zhangsan");
String [] option1 = {"private","long","sizeof","double"};
String [] option2 = {"$abc","abc_def","3def","_abc"};
Question[] questions = new Question[2];
questions[0] = new Question("下列哪個單詞不是Java的關鍵字?",option1,'C');
questions[1] = new Question("下列哪個單詞不能作為Java的標示符?",option2,'C');
Paper paper = new Paper("corejava",questions);
try {
Socket s = new Socket("127.0.0.1",8888);
new ExamMainFrame(student,paper,s,new PrintWriter(s.getOutputStream())).showMe();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void addScore(int id, int score, String subject) {
String str = "%ADD_SCORE%:"+id+":"+score+":"+subject;
pw.println(str);
pw.flush();
System.out.println(str);
}
class MyTimerTask extends TimerTask{
@Override
public void run() {
time--;
jlRTime.setText((time/60)+":"+(time%60));
if(time == 0){
timer.cancel();
int op = JOptionPane.showConfirmDialog(ExamMainFrame.this, "考試時間結束!點擊確定交卷.","時間結束",JOptionPane.YES_OPTION);
if(op == JOptionPane.YES_OPTION){
jbCarryOut.setEnabled(false);
addAnswer(num);
num++;
checkAnswer();
String str = "%ADD_SCORE%:"+student.getId()+":"+score+":"+paper.getName();
// addScore(student.getId(), score, paper.getName());
try {
pw.println(str);
pw.flush();
pw.close();
s.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.exit(0);
}
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -