3

他のウィンドウがサブクラス内で開始された場合に、別のウィンドウが閉じたときに1つのウィンドウを開く方法を理解するのに問題があります。これが私が使おうとしている不器用なコードですが、サブクラスのウィンドウに表示されている設定が停止します。おそらく、アクションイベント内にあるか、メインスレッドを停止していることが原因です。

    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());

私の考えでは、他のウィンドウが閉じるまでコードのセクションでスタックし、whileループが壊れたためにtutorialWindowのOpenブール値がfalseに設定されたときに再び表示されます。

これは正しいスレッド、またはおそらくさまざまな通知メソッドを使用することの問題であると確信していますが、現時点ではそれを行う方法がわかりません。

4

1 に答える 1

4

を使用して実行できますWindowListener。次のサンプルWindowAdapter実装WindowListenerでは、メソッドをオーバーライドしてpublic void windowClosed(final WindowEvent e)、2 番目のウィンドウを開きます。

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 に答える