我在解决在子类中启动另一个窗口时如何打开另一个窗口时遇到的问题。这是我要使用的笨拙代码,但是它会使子类的窗口可见的设置停止。可能是由于它在一个动作事件中,或者它正在使主线程停止。

    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由于打破while循环而将Open布尔值设置为false时再次出现。

我确定这是使用正确的线程或各种通知方法的问题,但是到目前为止,我不确定如何执行此操作。

最佳答案

您可以使用 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);

    }

}

07-24 09:20