saveButton.addActionListener(new ActionListener() {中的 ActionListener没有被调用
时间: 2024-06-02 21:10:33 浏览: 157
可能是因为您没有正确添加 ActionListener 到 saveButton 上。请确保您已经使用 `saveButton.addActionListener()` 方法将 ActionListener 添加到按钮上,并且方法中包含了正确的实现代码。
如果您已经这样做了,但是 ActionListener 仍然没有被调用,可能是因为您的代码存在其他问题。您可以尝试在 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()`方法关闭窗口。
创建一个窗口应用,输入文件全路径,可以读入文件内容,显示在界面上,对界面中 文本内容进行修改后,点击保存按钮可以将文本内容保存到文件。 提示:使用 JFileChooser 控件,并对该控件设置 ActionListener,获取已选择文件 getSelectedFile()。将读取的文本内容,显示在 JTextArea 控件上
好的,这是一个比较常见的需求,我可以给你提供一些代码示例,你可以参考一下。代码如下:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class FileEditor extends JFrame implements ActionListener {
private JTextArea textArea;
private JButton saveButton;
public FileEditor() {
super("File Editor");
// 创建一个菜单栏
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
// 创建一个菜单
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
// 创建“Open”菜单项
JMenuItem openMenuItem = new JMenuItem("Open");
openMenuItem.addActionListener(this); // 为菜单项添加事件监听器
fileMenu.add(openMenuItem);
// 创建一个文本区域
textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
getContentPane().add(scrollPane, BorderLayout.CENTER);
// 创建一个保存按钮
saveButton = new JButton("Save");
saveButton.addActionListener(this); // 为按钮添加事件监听器
getContentPane().add(saveButton, BorderLayout.SOUTH);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent event) {
Object source = event.getSource(); // 获取事件源
if (source instanceof JMenuItem) { // 如果是菜单项
JMenuItem menuItem = (JMenuItem) source;
if (menuItem.getText().equals("Open")) { // 如果是“Open”菜单项
JFileChooser fileChooser = new JFileChooser(); // 创建一个文件选择器
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) { // 用户选择了文件
File file = fileChooser.getSelectedFile(); // 获取选择的文件
try {
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
String line;
while ((line = br.readLine()) != null) { // 逐行读取文件内容
textArea.append(line + "\n"); // 将内容添加到文本区域中
}
br.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} else if (source instanceof JButton) { // 如果是按钮
try {
FileWriter writer = new FileWriter("test.txt");
writer.write(textArea.getText()); // 将文本区域中的内容写入文件
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new FileEditor();
}
}
```
这个程序使用了 `JFileChooser` 控件和 `JTextArea` 控件,可以让用户选择文件并读取文件内容,还可以将修改后的内容保存到文件中。你可以根据自己的需要进行修改和扩展。
阅读全文