用于关闭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 ,如下所示。

ActionListeneractionPerformed()方法中,您需要以下内容:

 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