用于关闭JDialog的按钮
我想在JDialog的底部添加一个按钮(JButton),按下时应关闭JDialog。 问题是我不知道该按钮的ActionListener中要写什么。 我不希望按钮退出程序,只需关闭对话框。
JDialog是通过显式调用JDialog的一个构造函数创建的,而不是通过调用JOptionPane中的一个方法来创建的。
我非常惊讶我无法使用谷歌找到答案。 我预计很多编程站点会广泛涵盖经常遇到的问题。 很奇怪,事实并非如此。
import java.awt.event.*; import javax.swing.*; public class YourDialog extends JDialog implements ActionListener { JButton button; public YourDialog() { button = new JButton("Close"); button.addActionListener(this); add(button); pack(); setVisible(true); } public void actionPerformed(ActionEvent e) { dispose(); } }
-
仅使用
dispose()
方法关闭dialolg父框架未关闭。 JVM没有终止的原因。
您可以让ActionListener
调度一个WindowEvent.WINDOW_CLOSING
,如下所示。
在ActionListener
的actionPerformed()
方法中,您需要以下内容:
dialog.setVisible(false);
如果你想永久摆脱对话(从内存中释放),你也可以打电话:
dialog.dispose();
…其中dialog是对话框的名称。 如果dialog
是一个局部变量,你需要让它最终以这种方式访问它(或者只是确保它从Java 8开始“有效地最终”)。
如果你将按钮添加为JDialog的子类的一部分(即如果你有class MyDialog extends JDialog
并且你在MyDialog
添加动作监听器)你将需要:
MyDialog.this.setVisible(false);
除了其他答案,您还可以将其设置为对话框根窗格的默认按钮:
JButton myButton = new JButton("Close"); myButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); // Or whatever else setVisible(false); } }); getRootPane().setDefaultButton(myButton);
这样,只要按下Enter键 ,就会调用它的ActionListener
。