У меня есть отдельное приложение 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, чтобы иметь нулевого родителя, и теперь все работает, как я хотел.