我想在JDialog的底部添加一个按钮(JButton),按下时应关闭JDialog。问题是我不知道在该按钮的ActionListener中写什么。我不希望按钮退出程序,只需关闭对话框。
JDialog是通过显式调用JDialog的一个构造函数创建的,而不是通过调用JOptionPane中的一个方法来创建的。
我很惊讶我无法使用Google找到答案。我预计很多编程站点会广泛涵盖经常遇到的问题。非常奇怪,事实并非如此。
答案 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 {...}如下所示:
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);
}
}