📄 paperpanel.java
字号:
package gui;
import io.ObjectIO;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import paper.AbstractQuestion;
import paper.FactualASet;
import paper.FactualAns;
import paper.FactualQuestion;
import paper.Paper;
import user.User;
/**
*
* @author SpiritRain
*
* contain question answer ans so on<br />
* it uses a card layout<br />
* each time change to a new question,<br />
* it only change the current card<br />
*
*/
public class PaperPanel extends JPanel {
/**
*
* @author SpiritRain
*
*
*
*/
private final class QuestionChangeAdapter
implements ActionListener, ChangeListener {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Prev.")) {
if (currQIndex > 0) {
jSpinnerProgress.setValue(new Integer(currQIndex));
}
} else if (e.getActionCommand().equals("Next")) {
if (currQIndex < paper.getQuestionCount() - 1) {
jSpinnerProgress.setValue(new Integer(currQIndex + 2));
} else if (
permit && currQIndex == paper.getQuestionCount() - 1) {
FactualASet fs =
new FactualASet(new FactualAns(new Object[] { "" }));
paper.addQuestion(new FactualQuestion("", fs, "", 0, 0));
jSpinnerProgress.setValue(new Integer(currQIndex + 2));
}
}
}
public void stateChanged(ChangeEvent e) {
saveStates();
currQIndex =
Integer.parseInt(jSpinnerProgress.getValue().toString()) - 1;
changeCurrentQuestion(paper.getQuestion(currQIndex));
getAnswer();
}
}
/**
*
* @author SpiritRain
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
private final class SavePaperAdapter implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (permit) {
writePaper();
} else {
getScore();
}
}
}
private final class TypeChangeAdapter implements ItemListener {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
currQType = jComboBoxType.getSelectedIndex();
questionPanels[currQType].setQuestion(
AbstractQuestion.createNewQuestion(currQType));
cardLayout.show(
jPanelQPanelContainer,
AbstractQuestion.TYPENAME[currQType]);
}
}
}
private CardLayout cardLayout;
private int currQIndex;
private int currQType;
private JComboBox jComboBoxType;
private JLabel jLabelNum;
private JPanel jPanelQPanelContainer;
private JSpinner jSpinnerProgress;
private JTextField jTextFieldDiff;
private JTextField jTextFieldPaper;
private Paper paper;
private boolean permit;
private QuestionPanel[] questionPanels = new QuestionPanel[3];
private SpinnerNumberModel spinnerNumberModel;
private User user;
/**
*
* @param user
* @param p
*/
public PaperPanel(User user, Paper p) {
super();
this.user = user;
this.permit = ((user.getPermission() == User.TEACHER));
JPanel jPanelQLibState = new JPanel();
((FlowLayout) jPanelQLibState.getLayout()).setAlignment(
FlowLayout.LEFT);
jPanelQLibState.add(new JLabel("Paper Name:"));
jTextFieldPaper = new JTextField(16);
jTextFieldPaper.setFocusable(permit);
jPanelQLibState.add(jTextFieldPaper);
jLabelNum = new JLabel();
jPanelQLibState.add(jLabelNum);
jPanelQLibState.add(new JLabel("AbstractQuestion Type:"));
jComboBoxType =
new JComboBox(new String[] { "Factual", "Binary", "Choice" });
jComboBoxType.setEnabled(permit);
jComboBoxType.addItemListener(new TypeChangeAdapter());
jPanelQLibState.add(jComboBoxType);
jPanelQLibState.add(new JLabel("Difficulty:"));
jTextFieldDiff = new JTextField(4);
jTextFieldDiff.setFocusable(permit);
jPanelQLibState.add(jTextFieldDiff);
cardLayout = new CardLayout();
jPanelQPanelContainer = new JPanel(cardLayout);
questionPanels[0] = new FactualPanel(permit);
jPanelQPanelContainer.add(
questionPanels[0],
AbstractQuestion.TYPENAME[0]);
questionPanels[1] = new BinaryPanel(permit);
jPanelQPanelContainer.add(
questionPanels[1],
AbstractQuestion.TYPENAME[1]);
questionPanels[2] = new ChoicePanel(permit);
jPanelQPanelContainer.add(
questionPanels[2],
AbstractQuestion.TYPENAME[2]);
QuestionChangeAdapter qcAdapter = new QuestionChangeAdapter();
JPanel jPanelCtl = new JPanel();
JButton jButtonPrevQ = new JButton("Prev.");
jButtonPrevQ.addActionListener(qcAdapter);
jPanelCtl.add(jButtonPrevQ);
JButton jButtonNext = new JButton("Next");
jButtonNext.addActionListener(qcAdapter);
jPanelCtl.add(jButtonNext);
jPanelCtl.add(new JLabel("go to:"));
spinnerNumberModel = new SpinnerNumberModel(1, 1, 1, 1);
jSpinnerProgress = new JSpinner(spinnerNumberModel);
jPanelCtl.add(jSpinnerProgress);
JButton jButtonSave;
if (permit) {
jButtonSave = new JButton("Save Paper");
} else {
jButtonSave = new JButton("Submit Paper");
}
jButtonSave.addActionListener(new SavePaperAdapter());
jPanelCtl.add(jButtonSave);
this.setLayout(new BorderLayout());
this.add(jPanelQLibState, BorderLayout.NORTH);
this.add(jPanelQPanelContainer, BorderLayout.CENTER);
this.add(jPanelCtl, BorderLayout.SOUTH);
this.setPaper(p);
this.getAnswer();
jSpinnerProgress.addChangeListener(qcAdapter);
}
/**
*
* @param question
*/
public void changeCurrentQuestion(AbstractQuestion question) {
currQType = question.getType();
this.jComboBoxType.setSelectedIndex(currQType);
this.jTextFieldDiff.setText(
"" + paper.getQuestion(currQIndex).getDifficulty());
this.questionPanels[currQType].setQuestion(
paper.getQuestion(currQIndex));
this.cardLayout.show(
jPanelQPanelContainer,
AbstractQuestion.TYPENAME[currQType]);
}
/**
*
*
*/
private void getAnswer() {
if (permit) {
this.questionPanels[currQType].setAnswer(paper.getKey(currQIndex));
} else {
this.questionPanels[currQType].setAnswer(
paper.getAnswer(currQIndex));
}
}
/**
*
*
*/
private void getScore() {
JOptionPane.showMessageDialog(
null,
"Your score is " + paper.calScore());
}
/**
*
*
*/
private void saveStates() {
if (permit) {
paper.setQuestion(
currQIndex,
this.questionPanels[currQType].createNewQuestion(
Integer.parseInt(this.jTextFieldDiff.getText())));
} else {
paper.setAnswer(
this.currQIndex,
this.questionPanels[currQType].createNewAnswer());
}
}
/**
*
* @param paper
*/
public void setPaper(Paper paper) {
this.paper = paper;
this.jTextFieldPaper.setText(paper.getName());
Integer i = new Integer(paper.getQuestionCount());
spinnerNumberModel.setMaximum(i);
this.jLabelNum.setText(
"AbstractQuestion Number: " + paper.getQuestionCount());
currQIndex = 0;
this.changeCurrentQuestion(paper.getQuestion(currQIndex));
}
/**
*
*
*/
private void writePaper() {
saveStates();
paper.setName(this.jTextFieldPaper.getText());
ObjectIO.write(this.paper, paper.getName());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -