用于关闭JDialog的按钮

时间:2011-08-06 21:52:58

标签: java swing jdialog

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

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

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

5 个答案:

答案 0 :(得分:36)

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没有终止的原因。

答案 1 :(得分:7)

您可以ActionListener发送一个WindowEvent.WINDOW_CLOSING,如图所示here

答案 2 :(得分:6)

actionPerformed()的{​​{1}}方法中,您需要以下内容:

ActionListener

如果您想要永久删除对话框(从内存中释放),那么您调用:

dialog.setVisible(false);

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

如果您要将该按钮添加为JDialog的子类的一部分(即,如果您有dialog并且您要在class MyDialog extends JDialog中添加动作侦听器),则需要:< / p>

MyDialog

答案 3 :(得分:0)

除了其他答案,您还可以将其设置为对话框根窗格的默认按钮:

a = [5, 10, 15, 20, 25]
b = [a[0],a[-1]]
print(b)

这样,只要按下 Enter ,就会调用其JButton myButton = new JButton("Close"); myButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); // Or whatever else setVisible(false); } }); getRootPane().setDefaultButton(myButton);

答案 4 :(得分:0)

我所做的略有不同,它达到了目的。我有几节课。它们扩展了JPanel,具有不同的用途,并使用JDialogs获取用户输入。

一个典型的类将包含必填字段,保存和取消按钮。

公共类EnterpriseGUI扩展了javax.swing.JPanel {...}如下所示:

JPanel class in designer mode

EnterpriseGUI类具有私有变量jdialog和设置jdialog的方法。以及“保存”按钮和“取消”按钮的ActionEvent。

    private JDialog jdialog;
    public void setJDialog(JDialog jdialog)
        {
            this.jdialog = jdialog;
        }
private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {                                        
        //Do your stuff..
        jdialog.dispose();
} 

private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {                                          
        //Discard your stuff..
        jdialog.dispose();
    } 

最后,我根据需要从任何其他类创建EnterpriseGUI实例,并将其嵌入到JDialog中。

Class OtherClass{
private JDialog dialog;
private EnterpriseGUI = new enterprisegui();
    private void button1ActionPerformed(java.awt.event.ActionEvent evt) {                                             
        this.dialog = new JDialog(this, "My dialog", true);
        this.dialog.setResizable(false);
        enterprisegui.setJDialog(dialog);
        this.dialog.getContentPane().add(enterprisegui);
        this.dialog.pack();

        Dimension Size = Toolkit.getDefaultToolkit().getScreenSize();
        this.dialog.setLocation(new Double((Size.getWidth()/2) - 
                (dialog.getWidth()/2)).intValue(), new Double((Size.getHeight()/2) - 
                        (dialog.getHeight()/2)).intValue());
        this.dialog.setVisible(true);

    }  
}