package 基于GUI的两个整数相加;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
public class AdditionGUI extends JFrame {
private JTextField textField1, textField2, textField3;
private JButton button;
private JLabel label1, label2, label3;
private JPanel panel;
private Random random;
private int num1, num2;
private int score = 0;
private int questionCount = 0;
private Timer timer;
private int timeLeft = 200;
private JProgressBar progressBar;
private ArrayList<String> correctQuestions = new ArrayList<>();
private ArrayList<String> incorrectQuestions = new ArrayList<>();
public AdditionGUI() {
super("加法运算");
setLayout(new BorderLayout());
random = new Random();
num1 = random.nextInt(100);
num2 = random.nextInt(100);
panel = new JPanel();
panel.setLayout(new FlowLayout());
textField1 = new JTextField(String.valueOf(num1), 10);
textField2 = new JTextField(String.valueOf(num2), 10);
textField3 = new JTextField(10);
button = new JButton("确定");
label1 = new JLabel("+");
label2 = new JLabel("=");
label3 = new JLabel("状态栏:");
progressBar = new JProgressBar(0, 100);
progressBar.setValue(0);
progressBar.setStringPainted(true);
panel.add(textField1);
panel.add(label1);
panel.add(textField2);
panel.add(label2);
panel.add(textField3);
panel.add(button);
add(panel, BorderLayout.NORTH);
add(label3, BorderLayout.CENTER);
add(progressBar, BorderLayout.SOUTH);
timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
timeLeft--;
progressBar.setValue(questionCount);
if (timeLeft <= 0 || questionCount >= 100) {
((Timer)e.getSource()).stop();
label3.setText("你的分数是:" + score + ",你已经完成了所有的题目,总共花费了 " + (200 - timeLeft) + " 秒");
writeToFile();
displayQuestions();
} else {
label3.setText("剩余时间:" + timeLeft + "秒,剩余题目数量:" + (100 - questionCount));
}
}
});
timer.start();
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (questionCount < 100) {
try {
int input = Integer.parseInt(textField3.getText());
if (input == num1 + num2) {
label3.setText("状态栏:正确");
correctQuestions.add(num1 + " + " + num2 + " = " + input);
score++;
} else {
label3.setText("状态栏:错误");
incorrectQuestions.add(num1 + " + " + num2 + " = " + input);
}
} catch (NumberFormatException ex) {
label3.setText("状态栏:请输入一个有效的整数");
}
num1 = random.nextInt(100);
num2 = random.nextInt(100);
textField1.setText(String.valueOf(num1));
textField2.setText(String.valueOf(num2));
textField3.setText("");
textField3.requestFocusInWindow();
questionCount++;
}
}
});
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_PRESSED && e.getKeyCode() == KeyEvent.VK_ENTER) {
button.doClick();
return true;
}
return false;
}
});
}
private void writeToFile() {
try (FileWriter writer = new FileWriter("questions.txt")) {
writer.write("Correct Questions:\n");
for (String question : correctQuestions) {
writer.write(question + "\n");
}
writer.write("\nIncorrect Questions:\n");
for (String question : incorrectQuestions) {
writer.write(question + "\n");
}
writer.write("\nTotal time spent: " + (200 - timeLeft) + " seconds");
} catch (IOException e) {
e.printStackTrace();
}
}
public void displayQuestions() {
JTextArea textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setPreferredSize(new Dimension(500, 400));
textArea.setEditable(false);
StringBuilder sb = new StringBuilder();
sb.append("Correct Questions:\n");
for (String question : correctQuestions) {
sb.append(question).append("\n");
}
sb.append("\nIncorrect Questions:\n");
for (String question : incorrectQuestions) {
sb.append(question).append("\n");
}
textArea.setText(sb.toString());
JOptionPane.showMessageDialog(null, scrollPane);
}
public static void main(String[] args) {
AdditionGUI gui = new AdditionGUI();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setSize(500, 200);
gui.setVisible(true);
}
}
sssssssssss
最新推荐文章于 2024-10-02 10:53:34 发布