用于关闭JDialog的按钮

Sob*_*LAN 22 java swing jdialog

我想在JDialog的底部添加一个按钮(JButton),按下时应关闭JDialog.问题是我不知道在该按钮的ActionListener中写什么.我不希望按钮退出程序,只需关闭对话框.

JDialog是通过显式调用JDialog的一个构造函数创建的,而不是通过调用JOptionPane中的一个方法来创建的.

我非常惊讶于我无法使用Google找到答案.我预计很多编程站点都会广泛涵盖经常遇到的问题.很奇怪,事实并非如此.

Moh*_*lam 41

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();
  }
}
Run Code Online (Sandbox Code Playgroud)
  • 仅关闭dialolg使用dispose()方法父框架未关闭.JVM没有终止的原因.


tra*_*god 7

您可以在此处显示ActionListener调度a .WindowEvent.WINDOW_CLOSING

  • +1,将事件调度到窗口允许执行任何WindowListener代码.您还可以查看[关闭应用程序]中的`ExitAction`类(http://tips4java.wordpress.com/2009/05/01/closing-an-application/).该动作更为通用,因为它可以与任何框架或对话框一起使用. (2认同)

Mic*_*rry 6

在你想要的东西的actionPerformed()方法中ActionListener:

dialog.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

如果你想永久摆脱对话(从内存中释放),你也可以打电话:

dialog.dispose(); 
Run Code Online (Sandbox Code Playgroud)

...其中dialog是对话框的名称.如果dialog是一个局部变量,你需要最终以这种方式访问​​它(或者只是确保它从Java 8开始"有效地最终").

如果你将按钮添加为JDialog的子类的一部分(即如果你已经得到class MyDialog extends JDialog并且你正在添加动作监听器MyDialog),你将需要:

MyDialog.this.setVisible(false);
Run Code Online (Sandbox Code Playgroud)