2012-01-25 34 views
2

我有一個帶邊框佈局的圖形用戶界面。在NORTH我已經添加了一些組件。 我的標籤組件有GIF圖標是隱形的lblBusy.setVisible(false); 後來一個按鈕使它看起來像下面一樣。爲什麼它不顯示?爲什麼setVisible不起作用?

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); 
     } 
    }); 
+2

爲了更好地幫助越早,張貼[SSCCE(http://sscce.org/)。 –

+0

您是如何在「NORTH」區域添加組件的?如果您逐個添加它們,只有最後一個可用,那麼您的標籤可能沒有真正添加到您的面板中? – Laf

+0

**像這樣:**'\t \t constraints.setGxGyGwGhWxWyFillAnchor(4,0,1,1,1.0,0.0,TGridBagConstraints.HORIZONTAL,TGridBagConstraints.EAST); \t \t gridbaglayout.setConstraints(lblBusy,constraints); \t \t panelStatus.add(lblBusy);' – itro

回答

3

1)這是EventDispatchThread rellated問題,EDT相當保證的GUI的所有更改會在某一時刻

2)你從JButton調用ActionPerformed要做,直到所有的事件結束你的GUI應該是凍結或是不負責任的,JButtonJLabel在你的情況下是相同的

3)更好的是將File內容重定向到Backgroung任務,例如SwingWorkerRunnable#Thread然後JButtonJLabel將被改變和GUI將是鼠標負責後臺任務或鍵盤

4)骯髒的黑客分裂到兩個分離的Action通過javax.swing.Timer延遲期間,但在這種情況下,再次直到所有事件結束您的GUI將凍結或是沒有責任

+0

+1的信息。如果我在第3點沒有錯誤(JButton和JLabel將會改變,並且GUI會在這期間),我想你的意思是編寫GUI將會做,而不是在GUI期間。問候 –

2

很可能是因爲圖形用戶界面在一次打包時標籤不可見,所以沒有指定空間來顯示它。對於更確切的事情,張貼SSCCE。

2

在我看來,你正在編寫lblBusy.setVisible(true);,在那之後lblBusy.setVisible(false);在mouseClicked()方法。由於您希望只需點擊一個按鈕就可以看到它,因此您不是隻使用lblBusy.setVisible(true);,而是同時使用這兩個選項。

儘管一旦完成了它的工作,您可以從Download Class的末尾調用lblBusy.setVisible(false);

問候