图形用户界面课程 3:多项选择图形用户界面 编写程序以创建多项选择测验 需要一个基于 GUI 的程序,使人们能够从多项选择题库中进行测试。每个问题包括: 问题文本; 4个可能的答案; 正确答案的数量(1-4,而不是0-3); 问题按顺序保存在文本文件中,每个问题保存在 6 行上。问题文本文件中的示例条目可能如下所示: 该计划应具有以下特点: 一个包含“打开”和“退出”的菜单,其中“打开”启动 JFileChooser 以选择包含问题的文件,“退出”结束程序。 加载文件后,GUI 应一次显示一个问题及其答案。 用户应该能够选择一个答案,并且应该通知他们是否正确。 应让用户知道正确回答的数量和回答的问题总数。 用户应该只有在回答了当前问题后才能继续下一个问题。 回答完所有问题后,应通知用户他们的总分以及游戏已完成。现在应启用“打开”菜单项以启动新测验。(可选)您可以添加重新启动菜单项以重做当前测验。
时间: 2024-02-12 07:02:53 浏览: 56
好的,我会根据您提供的要求,提供一个基于Java Swing的多项选择题GUI程序的代码示例。请注意,这只是一个示例,您可以根据需要进行修改和调整。
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MultiChoiceQuiz extends JFrame implements ActionListener {
private JMenuBar menuBar;
private JMenu fileMenu;
private JMenuItem openMenuItem, exitMenuItem;
private JRadioButton[] options;
private JLabel questionLabel, resultLabel;
private JButton nextButton;
private int correctAnswers, totalQuestions, currentQuestionIndex;
private String[] questions, answers, correctAnswersCount;
public MultiChoiceQuiz() {
super("Multi-Choice Quiz");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 300);
// Create menu bar and menu items
menuBar = new JMenuBar();
fileMenu = new JMenu("File");
openMenuItem = new JMenuItem("Open...");
exitMenuItem = new JMenuItem("Exit");
// Add menu items to menu bar
fileMenu.add(openMenuItem);
fileMenu.addSeparator();
fileMenu.add(exitMenuItem);
menuBar.add(fileMenu);
// Set menu bar
setJMenuBar(menuBar);
// Add action listeners to menu items
openMenuItem.addActionListener(this);
exitMenuItem.addActionListener(this);
// Create components
questionLabel = new JLabel();
options = new JRadioButton[4];
options[0] = new JRadioButton();
options[1] = new JRadioButton();
options[2] = new JRadioButton();
options[3] = new JRadioButton();
ButtonGroup group = new ButtonGroup();
group.add(options[0]);
group.add(options[1]);
group.add(options[2]);
group.add(options[3]);
nextButton = new JButton("Next");
nextButton.setEnabled(false);
resultLabel = new JLabel();
// Set layout
setLayout(new BorderLayout());
JPanel questionPanel = new JPanel(new GridLayout(0, 1));
questionPanel.add(questionLabel);
for (JRadioButton option : options) {
questionPanel.add(option);
}
add(questionPanel, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel();
buttonPanel.add(nextButton);
add(buttonPanel, BorderLayout.SOUTH);
add(resultLabel, BorderLayout.NORTH);
// Add action listener to next button
nextButton.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == openMenuItem) {
// Open file chooser dialog
JFileChooser chooser = new JFileChooser();
int result = chooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
try {
// Load questions and answers from file
File file = chooser.getSelectedFile();
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
int i = 0;
totalQuestions = 0;
correctAnswers = 0;
while ((line = reader.readLine()) != null) {
if (i % 6 == 0) {
totalQuestions++;
} else if (i % 6 == 1) {
questions[(i / 6)] = line;
} else if (i % 6 >= 2 && i % 6 <= 5) {
int optionIndex = (i % 6) - 2;
answers[(i / 6)][optionIndex] = line;
if (correctAnswersCount[(i / 6)].charAt(optionIndex) == '1') {
correctAnswers++;
}
}
i++;
}
reader.close();
// Initialize quiz
currentQuestionIndex = 0;
questionLabel.setText(questions[currentQuestionIndex]);
for (int j = 0; j < 4; j++) {
options[j].setText(answers[currentQuestionIndex][j]);
}
nextButton.setEnabled(true);
resultLabel.setText("");
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "Error loading file: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
} else if (source == exitMenuItem) {
// Exit program
System.exit(0);
} else if (source == nextButton) {
// Check answer and show next question
if (options[0].isSelected() || options[1].isSelected() || options[2].isSelected() || options[3].isSelected()) {
boolean correct = true;
for (int i = 0; i < 4; i++) {
if (correctAnswersCount[currentQuestionIndex].charAt(i) == '1') {
if (!options[i].isSelected()) {
correct = false;
break;
}
} else {
if (options[i].isSelected()) {
correct = false;
break;
}
}
}
if (correct) {
correctAnswers++;
}
currentQuestionIndex++;
if (currentQuestionIndex < totalQuestions) {
questionLabel.setText(questions[currentQuestionIndex]);
for (int i = 0; i < 4; i++) {
options[i].setText(answers[currentQuestionIndex][i]);
options[i].setSelected(false);
}
nextButton.setEnabled(false);
} else {
// Show final score
resultLabel.setText("Score: " + correctAnswers + "/" + totalQuestions);
nextButton.setEnabled(false);
}
} else {
JOptionPane.showMessageDialog(this, "Please select an answer.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
public static void main(String[] args) {
MultiChoiceQuiz quiz = new MultiChoiceQuiz();
quiz.setVisible(true);
}
}
```
这是一个简单的多项选择题GUI程序示例,其中包含菜单项“打开”和“退出”,用户可以选择包含问题的文件并开始测验,然后一次显示一个问题及其答案,并通知用户他们是否回答正确。程序还会跟踪正确回答的数量和回答的问题总数,并在用户回答完所有问题后通知他们他们的总分以及游戏已完成。