2

ボーダーレイアウトのswing GUIがあります。で、NORTHいくつかのコンポーネントを追加しました。GIFアイコンを持つ私のラベルコンポーネントはlblBusy.setVisible(false); 、後でボタンが非表示になり、以下のように表示されます。表示されないのはなぜですか?

btnDownload.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    lblBusy.setVisible(true);
                    btnCancel.setEnabled(true);
                }
            });

            download = new Download(txtSource.getText(), new File(txtDestination.getText()), textAreaStatus);
            download.start();
            lblBusy.setVisible(false);
        }
    });
4

3 に答える 3

3

1)これはEventDispatchThread関連する問題です。EDTはGUIへのすべての変更が一瞬で行われることを完全に保証しました

ActionPerformed2)から呼び出しJButton、すべてのイベントが終了するまで、GUIはフリーズするか、無責任である必要があります。これは、あなたの場合JButtonと同じです。JLabel

File3)コンテンツの読み取りをBackgroungタスクにリダイレクトする方が良いでしょう。たとえばSwingWorkerRunnable#ThreadそれJButton以降JLabelは変更され、GUIはMouseまたはKeyBoardを担当するBackgroundタスク中になります。

また

4)ダーティハックが2つに分割され、Action遅延しjavax.swing.Timerますが、この場合も、すべてのイベントが終了するまで、GUIがフリーズするか、無責任になります

于 2012-01-25T16:31:21.717 に答える
2

あなたが書いているように思えます。lblBusy.setVisible(true);その後lblBusy.setVisible(false);、mouseClicked() メソッドで。ボタンをクリックするだけで表示できるようにしたかったので、lblBusy.setVisible(true);両方を使用するのではなく、 のみを使用していませんか。

lblBusy.setVisible(false);ただし、実行が完了したら、Download Class の最後から呼び出すことができます。

よろしく

于 2012-01-25T17:01:19.257 に答える
2

ほとんどの場合、ラベルが表示されていないときに GUI がパックされたため、ラベルを表示するためのスペースが割り当てられていませんでした。より明確なものについては、SSCCE を投稿してください。

于 2012-01-25T16:24:32.940 に答える