3

如果另一个窗口是在子类中启动的,我在弄清楚如何在另一个窗口关闭时打开一个窗口时遇到问题。这是我尝试使用的笨拙代码,但它停止了子类窗口的可见设置。也许是因为它在一个动作事件中,或者它正在停止主线程。

    tutorial = new tutorialWindow();
    this.setVisible(false);
    tutorial.setLocationRelativeTo(null);
    tutorial.setVisible(true);
    tutorial.setCurrentUser(users.getCurrentUser());

    while(tutorial.isOpen() == true ) {
    }
    this.setVisible(true);
    users.updateUser(tutorial.getCurrentUser());

我的想法是,它只会卡在代码部分中,直到另一个窗口关闭,然后当 tutorialWindow 的 Open 布尔值设置为 false 时会再次出现,因为它打破了 while 循环。

我确定这是使用正确线程的问题,或者可能是各种通知方法,但到目前为止我不确定如何做到这一点。

4

1 回答 1

4

您可以使用WindowListener. 在下面的示例WindowAdapter实现WindowListener中,我只是覆盖了该public void windowClosed(final WindowEvent e)方法,打开了第二个窗口。

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestJFrame {

    public static void main(final String args[]) {
        JFrame jFrame1 = new JFrame();
        jFrame1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        jFrame1.add(new JLabel("First JFrame"));
        jFrame1.pack();

        final JFrame jFrame2 = new JFrame();
        jFrame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        jFrame2.add(new JLabel("Second JFrame"));
        jFrame2.pack();

        jFrame1.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosed(final WindowEvent e) {
                jFrame2.setVisible(true);
            }
        });

        jFrame1.setVisible(true);

    }

}
于 2012-07-07T11:12:52.160 回答