calculateButton.addActionListener(new ActionListener()
时间: 2024-04-11 08:31:39 浏览: 22
calculateButton.addActionListener(new ActionListener()的意思是给calculateButton按钮添加一个ActionListener监听器。当用户点击calculateButton按钮时,ActionListener会响应该事件,并执行相应的操作。在addActionListener方法的括号内,通常会传入一个实现了ActionListener接口的对象,该对象负责处理按钮点击事件的逻辑。
相关问题
用JFrame和ActionListener类来实现
以下是使用`JFrame`和`ActionListener`类实现的Java代码:
```java
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Main extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JTextField textField;
private JLabel resultLabel;
public Main() {
super("计算器");
setLayout(new BorderLayout());
JPanel inputPanel = new JPanel();
inputPanel.add(new JLabel("请输入一个正整数n:"));
textField = new JTextField(10);
inputPanel.add(textField);
JButton calculateButton = new JButton("计算");
calculateButton.addActionListener(this);
inputPanel.add(calculateButton);
add(inputPanel, BorderLayout.NORTH);
JPanel resultPanel = new JPanel();
resultLabel = new JLabel();
resultPanel.add(resultLabel);
JButton saveButton = new JButton("保存");
saveButton.addActionListener(this);
resultPanel.add(saveButton);
add(resultPanel, BorderLayout.CENTER);
JButton closeButton = new JButton("关闭");
closeButton.addActionListener(this);
add(closeButton, BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("计算")) {
try {
int n = Integer.parseInt(textField.getText());
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
resultLabel.setText("1到" + n + "的和为:" + sum);
} catch (NumberFormatException ex) {
resultLabel.setText("请输入一个正整数!");
}
} else if (e.getActionCommand().equals("保存")) {
if (resultLabel.getText().equals("")) {
resultLabel.setText("请先计算!");
} else {
try {
String fileName = textField.getText() + ".txt";
PrintWriter printWriter = new PrintWriter(new FileWriter(fileName));
printWriter.println(resultLabel.getText());
printWriter.close();
resultLabel.setText(resultLabel.getText() + " 已保存到 " + fileName);
} catch (IOException ex) {
resultLabel.setText("保存失败!");
ex.printStackTrace();
}
}
} else if (e.getActionCommand().equals("关闭")) {
dispose();
}
}
public static void main(String[] args) {
new Main();
}
}
```
该程序创建了一个`JFrame`窗口,并分别在窗口的北、中、南面板中添加了输入、输出和关闭按钮。在输入面板中,使用`JTextField`类实现了用户输入正整数的功能,并添加了一个计算按钮,点击该按钮会计算1到n的和并在输出面板中显示结果。在输出面板中,使用`JLabel`类显示计算结果,并添加了一个保存按钮,点击该按钮会将计算结果保存到用户指定的文件中。在关闭按钮中,添加了关闭窗口的功能。
在`Main`类中实现了`ActionListener`接口,并重写了`actionPerformed()`方法来响应用户点击按钮的事件。根据不同的事件源,执行不同的操作。在计算事件中,使用`try-catch`块来捕获用户输入的非整数情况,并在输出面板中显示相应的错误信息。在保存事件中,首先判断计算结果是否为空,如果为空则提示用户先进行计算;否则,将计算结果保存到用户指定的文件中,并在输出面板中显示保存信息。在关闭事件中,使用`dispose()`方法关闭窗口。
用JAVA编写一个程序,按“产生”按钮,产生两个随机数并分别显示在“数字一”和“数字二”对应的文本框内,按“计算”按钮,计算产生的这两个随机数之和,并显示在“结果”对应的文本框内。 本题请编写三个程序,事件处理程序分别采用以下三种方式:1)内部类 2) 事件源所在类直接实现接口 3)匿名类 实现上述功能要求。
以下是三种不同方式的代码实现:
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();
}
}
```