⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paperpanel.java

📁 考试系统
💻 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 + -