设计一个Java事件处理,有一个窗口,点击按钮生成1-100的随机数,弹出一个新的窗口输入猜的数字,如果猜的数字大于随机数显示“猜大了”,小于显示“猜小了”然后继续输入,直到猜中了现实“猜中了”并且显示猜的次数。要求视图,窗口,监视不在一个类里
时间: 2024-02-27 13:56:04 浏览: 54
好的,根据您的要求,我为您设计了如下的Java事件处理程序:
首先是窗口类 `MainWindow`:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MainWindow {
private JFrame frame;
private JButton button;
public MainWindow() {
frame = new JFrame("Guessing Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton("Start Game");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int number = generateRandomNumber();
GuessWindow guessWindow = new GuessWindow(number);
guessWindow.showWindow();
}
});
JPanel panel = new JPanel();
panel.add(button);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.setSize(300, 100);
frame.setVisible(true);
}
private int generateRandomNumber() {
return (int) (Math.random() * 100) + 1;
}
public static void main(String[] args) {
new MainWindow();
}
}
```
在 `MainWindow` 类中,我们创建了一个窗口,其中包含一个用于启动游戏的按钮。当用户点击按钮时,我们生成一个随机数并创建一个新的 `GuessWindow` 对象来处理猜测游戏。
接下来是猜测窗口类 `GuessWindow`:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GuessWindow {
private int number;
private int guessCount;
private JFrame frame;
private JTextField textField;
private JLabel resultLabel;
public GuessWindow(int number) {
this.number = number;
guessCount = 0;
frame = new JFrame("Guessing Game");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
textField = new JTextField(10);
textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
guess();
}
});
resultLabel = new JLabel("Guess a number between 1 and 100.");
resultLabel.setHorizontalAlignment(SwingConstants.CENTER);
JPanel panel = new JPanel();
panel.add(textField);
panel.add(resultLabel);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.pack();
}
public void showWindow() {
frame.setVisible(true);
}
private void guess() {
guessCount++;
int guessNumber = 0;
try {
guessNumber = Integer.parseInt(textField.getText());
} catch (NumberFormatException e) {
resultLabel.setText("Invalid input, please enter a number.");
return;
}
if (guessNumber < 1 || guessNumber > 100) {
resultLabel.setText("Please enter a number between 1 and 100.");
return;
}
if (guessNumber == number) {
resultLabel.setText("Congratulations! You guessed the number in " + guessCount + " tries.");
textField.setEnabled(false);
} else if (guessNumber < number) {
resultLabel.setText("Too small, please guess again.");
} else {
resultLabel.setText("Too big, please guess again.");
}
textField.setText("");
}
}
```
在 `GuessWindow` 类中,我们创建了一个新的窗口来处理猜测游戏。我们使用 `JTextField` 获取用户输入的猜测数字,并使用 `JLabel` 显示结果。每次用户猜测时,我们将猜测次数加一,并根据用户输入的数字与随机数的大小关系更新结果标签。当用户猜中数字时,我们禁用文本框并显示猜测次数。
最后是监视器类 `GameMonitor`:
```java
public class GameMonitor {
public static void main(String[] args) {
new MainWindow();
}
}
```
在 `GameMonitor` 类中,我们只需要启动程序,创建一个新的 `MainWindow` 对象即可。
这就是整个程序的代码。运行程序,您将看到一个窗口,其中包含一个按钮。当您单击该按钮时,将出现一个新窗口,提示您猜测一个数字。在猜测完数字后,窗口将显示您猜测的结果,并告诉您猜测次数。
阅读全文