📄 exammainframe.java
字号:
package exam.gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import exam.dao.PaperLoad;
import exam.dao.ScoreIntoSco;
import exam.model.Question;
import exam.model.Student;
/**
* 考试主界面
*
* @author 刘东
*
*/
public class ExamMainFrame implements ActionListener {
private JFrame frame;
private JLabel welcomeL, stuIdL, stuNameL, courseNameL,
remainderQuesstionL, remainderTimeL, quesstionCountL, timeL,
pleaseL;
private JButton last, next, submit;
private ButtonGroup answerGroup;
private JRadioButton buttonA, buttonB, buttonC, buttonD, buttonDefault;
private JPanel ps, pw, pe, pn;
private JPanel questionPanel;
private Student student;
private String subject;
private Question[] questions;
private String[] answer;
private int count, questionCount, remainderCount;
private int score;
private int time, shi, fen, miao, delay;
private Timer timer;
public ExamMainFrame(Student student, String subject) {
this.student = student;
this.subject = subject;
frame = new JFrame("达内考试系统--" + subject);
welcomeL = new JLabel("欢迎进入达内考试系统");
stuIdL = new JLabel(" 考生编号:" + student.getId());
stuNameL = new JLabel(" 考生姓名:" + student.getUserName());
courseNameL = new JLabel(" 考试科目:" + subject);
remainderQuesstionL = new JLabel("剩余试题:");
remainderTimeL = new JLabel("剩余时间:");
quesstionCountL = new JLabel();
timeL = new JLabel();
pleaseL = new JLabel("请选择:");
pn = new JPanel();
pw = new JPanel();
pe = new JPanel();
ps = new JPanel();
last = new JButton("<<上一题");
next = new JButton("下一题>>");
submit = new JButton("交卷");
answerGroup = new ButtonGroup();
buttonA = new JRadioButton("A");
buttonB = new JRadioButton("B");
buttonC = new JRadioButton("C");
buttonD = new JRadioButton("D");
buttonDefault = new JRadioButton();
count = 0;
score = 0;
questions = new PaperLoad(subject).getPaper(subject).getQuestions();
questionCount = questions.length;
answer = new String[questionCount];
timer = new Timer();
init();
}
private void init() {
pn.add(welcomeL);
welcomeL.setFont(new Font("仿宋", Font.BOLD, 20));
pn.add(stuIdL);
pn.add(stuNameL);
pn.add(courseNameL);
pw.setLayout(new BoxLayout(pw, BoxLayout.Y_AXIS));
pw.add(remainderQuesstionL);
pw.add(quesstionCountL);
pe.setLayout(new BoxLayout(pe, BoxLayout.Y_AXIS));
pe.add(remainderTimeL);
pe.add(timeL);
answerGroup.add(buttonA);
answerGroup.add(buttonB);
answerGroup.add(buttonC);
answerGroup.add(buttonD);
answerGroup.add(buttonDefault);
ps.add(pleaseL);
ps.add(buttonA);
ps.add(buttonB);
ps.add(buttonC);
ps.add(buttonD);
ps.add(last);
last.addActionListener(this);
ps.add(next);
next.addActionListener(this);
ps.add(submit);
submit.addActionListener(this);
frame.add(pn, BorderLayout.NORTH);
frame.add(pw, BorderLayout.WEST);
frame.add(pe, BorderLayout.EAST);
frame.add(ps, BorderLayout.SOUTH);
questionPanel = new QuestionPanel(questions[count]);
frame.add(questionPanel, BorderLayout.CENTER);
last.setEnabled(false);
timer.scheduleAtFixedRate(new TimerTest(), 0, delay);
showRemainderCount();
showMe();
}
private void showMe() {
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(false);
setThisLocation();
}
private void showRemainderCount() {
remainderCount = 0;
for (int i = 0; i < answer.length; i++) {
if (answer[i] == null)
remainderCount++;
}
quesstionCountL.setText(remainderCount - 1 + "");
}
private void showQuestion() {
frame.remove(questionPanel);
questionPanel = new QuestionPanel(questions[count]);
frame.add(questionPanel, BorderLayout.CENTER);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent arg0) {
JButton b = (JButton) arg0.getSource();
if (b.getText().equals("<<上一题")) {
saveAnswer();
showRemainderCount();
next.setEnabled(true);
if (count > 0) {
count--;
if (count == 0)
last.setEnabled(false);
isAnswered();
showQuestion();
}
}
if (b.getText().equals("下一题>>")) {
saveAnswer();
showRemainderCount();
last.setEnabled(true);
if (count < questionCount - 1) {
count++;
if (count == questionCount - 1) {
next.setEnabled(false);
}
isAnswered();
showQuestion();
}
}
if (b.getText().equals("交卷")) {
saveAnswer();
scoreCount();
if (new ScoreIntoSco().addScore(student.getId(), score, subject)) {
JOptionPane.showMessageDialog(frame, "交卷成功,系统即将关闭!", "操作成功!",
JOptionPane.INFORMATION_MESSAGE);
frame.dispose();
System.exit(0);
}
}
}
private void saveAnswer() {
if (buttonA.isSelected()) {
answer[questions[count].getId() - 1] = "A";
buttonDefault.setSelected(true);
}
if (buttonB.isSelected()) {
answer[questions[count].getId() - 1] = "B";
buttonDefault.setSelected(true);
}
if (buttonC.isSelected()) {
answer[questions[count].getId() - 1] = "C";
buttonDefault.setSelected(true);
}
if (buttonD.isSelected()) {
answer[questions[count].getId() - 1] = "D";
buttonDefault.setSelected(true);
} else
return;
}
public void isAnswered() {
if (answer[count] == null)
return;
else {
if (answer[count].equals("A")) {
buttonA.setSelected(true);
}
if (answer[count].equals("B")) {
buttonB.setSelected(true);
}
if (answer[count].equals("C")) {
buttonC.setSelected(true);
}
if (answer[count].equals("D")) {
buttonD.setSelected(true);
}
}
}
private void scoreCount() {
int rightCount = 0;
for (int i = 0; i < answer.length; i++) {
if (answer[i] == null)
continue;
if (answer[i].equals(questions[i].getRightAnswer()))
rightCount++;
}
score = rightCount / questionCount * 100;
}
private void setThisLocation() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}
class TimerTest extends TimerTask {
public TimerTest() {
time = 70;// 以秒为单位
delay = 1000;// 时间间隔,1000毫秒
}
@Override
public void run() {
changeText();
time--;
if (time == 60) {
JOptionPane.showMessageDialog(frame,
"剩余时间不足,请尽快交卷,60秒后系统将自动提交!", "警告",
JOptionPane.WARNING_MESSAGE);
}
if (time == 0) {
timer.cancel();
submit.doClick();
}
}
private void changeText() {
shi = time / 3600;
fen = (time - shi * 3600) / 60;
miao = time - shi * 3600 - fen * 60;
timeL.setText(shi + ":" + fen + ":" + miao);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -