用JAVA编写一个程序,按“产生”按钮,产生两个随机数并分别显示在“数字一”和“数字二”对应的文本框内,按“计算”按钮,计算产生的这两个随机数之和,并显示在“结果”对应的文本框内。 本题请编写三个程序,事件处理程序分别采用以下三种方式:1)内部类 2) 事件源所在类直接实现接口 3)匿名类 实现上述功能要求。
时间: 2023-06-18 21:06:04 浏览: 46
以下是三种不同方式的代码实现:
1)内部类
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RandomSumWithInnerClass extends JFrame {
private JTextField num1Field;
private JTextField num2Field;
private JTextField resultField;
public RandomSumWithInnerClass() {
super("随机数求和");
// 创建GUI界面
JLabel num1Label = new JLabel("数字一:");
num1Field = new JTextField(10);
num1Field.setEditable(false);
JLabel num2Label = new JLabel("数字二:");
num2Field = new JTextField(10);
num2Field.setEditable(false);
JLabel resultLabel = new JLabel("结果:");
resultField = new JTextField(10);
resultField.setEditable(false);
JButton generateButton = new JButton("产生");
generateButton.addActionListener(new GenerateButtonListener());
JButton calculateButton = new JButton("计算");
calculateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int num1 = Integer.parseInt(num1Field.getText());
int num2 = Integer.parseInt(num2Field.getText());
int result = num1 + num2;
resultField.setText(String.valueOf(result));
}
});
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4, 2));
panel.add(num1Label);
panel.add(num1Field);
panel.add(num2Label);
panel.add(num2Field);
panel.add(resultLabel);
panel.add(resultField);
panel.add(generateButton);
panel.add(calculateButton);
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 200);
setVisible(true);
}
// 内部类实现按钮监听器
private class GenerateButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int num1 = (int) (Math.random() * 100);
int num2 = (int) (Math.random() * 100);
num1Field.setText(String.valueOf(num1));
num2Field.setText(String.valueOf(num2));
resultField.setText("");
}
}
public static void main(String[] args) {
new RandomSumWithInnerClass();
}
}
```
2)事件源所在类直接实现接口
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RandomSumWithInterface implements ActionListener {
private JTextField num1Field;
private JTextField num2Field;
private JTextField resultField;
public RandomSumWithInterface() {
JFrame frame = new JFrame("随机数求和");
// 创建GUI界面
JLabel num1Label = new JLabel("数字一:");
num1Field = new JTextField(10);
num1Field.setEditable(false);
JLabel num2Label = new JLabel("数字二:");
num2Field = new JTextField(10);
num2Field.setEditable(false);
JLabel resultLabel = new JLabel("结果:");
resultField = new JTextField(10);
resultField.setEditable(false);
JButton generateButton = new JButton("产生");
generateButton.addActionListener(this);
JButton calculateButton = new JButton("计算");
calculateButton.addActionListener(this);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4, 2));
panel.add(num1Label);
panel.add(num1Field);
panel.add(num2Label);
panel.add(num2Field);
panel.add(resultLabel);
panel.add(resultField);
panel.add(generateButton);
panel.add(calculateButton);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("产生")) {
int num1 = (int) (Math.random() * 100);
int num2 = (int) (Math.random() * 100);
num1Field.setText(String.valueOf(num1));
num2Field.setText(String.valueOf(num2));
resultField.setText("");
} else if (command.equals("计算")) {
int num1 = Integer.parseInt(num1Field.getText());
int num2 = Integer.parseInt(num2Field.getText());
int result = num1 + num2;
resultField.setText(String.valueOf(result));
}
}
public static void main(String[] args) {
new RandomSumWithInterface();
}
}
```
3)匿名类
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RandomSumWithAnonymousClass extends JFrame {
private JTextField num1Field;
private JTextField num2Field;
private JTextField resultField;
public RandomSumWithAnonymousClass() {
super("随机数求和");
// 创建GUI界面
JLabel num1Label = new JLabel("数字一:");
num1Field = new JTextField(10);
num1Field.setEditable(false);
JLabel num2Label = new JLabel("数字二:");
num2Field = new JTextField(10);
num2Field.setEditable(false);
JLabel resultLabel = new JLabel("结果:");
resultField = new JTextField(10);
resultField.setEditable(false);
JButton generateButton = new JButton("产生");
generateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int num1 = (int) (Math.random() * 100);
int num2 = (int) (Math.random() * 100);
num1Field.setText(String.valueOf(num1));
num2Field.setText(String.valueOf(num2));
resultField.setText("");
}
});
JButton calculateButton = new JButton("计算");
calculateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int num1 = Integer.parseInt(num1Field.getText());
int num2 = Integer.parseInt(num2Field.getText());
int result = num1 + num2;
resultField.setText(String.valueOf(result));
}
});
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4, 2));
panel.add(num1Label);
panel.add(num1Field);
panel.add(num2Label);
panel.add(num2Field);
panel.add(resultLabel);
panel.add(resultField);
panel.add(generateButton);
panel.add(calculateButton);
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
new RandomSumWithAnonymousClass();
}
}
```