【发布时间】:2011-12-10 12:21:14
【问题描述】:
我有一个独立的 Java 应用程序,它从数据库中获取数据并将其显示在 JTable 中。当应用程序启动时,会在 JDialog 中提示用户输入用户名/密码。输入正确的凭据后,将显示包含数据的主 JFrame。在主 JFrame 上,我有一个注销按钮,单击该按钮应关闭主 JFrame 并重新显示登录 JDialog。一切正常,除了我发现单击注销按钮时主 JFrame 并没有消失。下面是我的代码的一个小型工作示例:
Main.java:
import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MainFrame();
}
});
}
}
MainFrame.java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MainFrame extends JFrame implements ActionListener {
private JButton button;
private MyDialog dialog;
public MainFrame() {
super("this is the JFrame");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dialog = new MyDialog(this);
button = new JButton("click me to hide this JFrame and display JDialog");
button.addActionListener(this);
add(button);
pack();
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false); // works when changed to dispose();
dialog.setVisible(true);
}
}
MyDialog.java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
public class MyDialog extends JDialog implements ActionListener {
private JFrame parentFrame;
private JButton button;
public MyDialog(JFrame parentFrame) {
super(parentFrame, "this is the JDialog", true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.parentFrame = parentFrame;
button = new JButton("click me to hide JDialog and show JFrame");
button.addActionListener(this);
add(button);
pack();
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
parentFrame.setVisible(true);
}
}
在 MainFrame.java 中,如果我将setVisible(false) 的行更改为dispose(),那么当我单击按钮时,JFrame 就会消失。我的问题是,为什么这适用于dispose() 而不是setVisible(false)?有没有更好的方法来组织我的代码?我是 Swing 新手,所以如果这是一个基本问题,我深表歉意。谢谢。
2011-10-19 10:26 PDT 编辑
感谢大家的帮助。我将 JDialog 更改为具有 null 父级,现在一切正常。
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖SSCCE。
标签: java swing visibility dispose