3

私のスイングアプリには、サーバーボタンのあるメインウィンドウがあります。この JFrame は EDT で起動されます...

    EventQueue.invokeLater(new Runnable() {
        public void run() {
            JFrame server = new JFrame();
            server.setVisible(true);
            server.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                            //Do other stuff here
        }
    });

各ボタンは個別の JFrame を起動できます。

これらの新しいウィンドウをそれぞれ起動するために、新しい EDT スレッドを開始する必要があるかどうかわかりません。ありがとう。

4

3 に答える 3

4

通常、ボタン ハンドラー (アクション リスナー) にいる場合、これを呼び出すのは EDT です。これは、SwingUtilities.isEventDispatchThread を使用して確認できます。

于 2012-04-11T19:56:41.180 に答える
3

問題はありません。各アクション ハンドラは で実行されますEDT。なので、JFrameそこから新規で開けば問題ありません。

別のスレッドで何らかの作業 (計算など) を行っていた場合は問題ありませんが、UI に関係するすべての作業はEDT. SwingWorkerとがあるのはそのためinvokeLaterです。

于 2012-04-11T19:56:48.110 に答える
2

私の答えは

しかし

  • JFrameそうではなく、前にその内容で準備することはできますがEDT、最も重要な方法が2つあります。

    1. JFrame#pack() // finalize & calculate used LayoutManager

    2. JFrame#setVisible(true) // display Container on the screen

  • Each button can launch a separate JFrame.そうしないでください。代わりにCardLayoutを使用して、ビューを切り替えます。ポップアップウィンドウが必要な場合は、1つのJFrameのみを作成し、別のコンテナはJDialogのみにすることができます。

于 2012-04-11T20:00:02.787 に答える