2011-10-04 54 views
1

我有一個JLabel,我需要在按下按鈕時動態更改。我正在使用JLabel.setText(s)JLabel.setText()在設置大小後不起作用

但是,它不起作用。我已經試過:

JLabel.repaint() 
JLabel.validate() 
JLabel.revalidate() 

我覺得奇怪的事情是,當我不使用任何設置的JLabel的大小,它工作正常:

JLabel.setPrefferedSize() 
JLabel.setMinimumSize() 
JLabel.setSize() 

誰能幫我爲什麼在我設置了其中一個尺寸屬性之後它不起作用?

+2

請在您的問題中添加[SSCCE](http://sscce.org)。 – MockerTim

+0

根據所提供的有限數據很難猜出什麼是錯的(這是我們所能做的)。如果以下答案都不能令人滿意地回答您的問題,我也建議您創建併發布[SSCCE](http://sscce.org)。 –

回答

0

想通了我的問題,

我所用:

JLabel.setPreferredSize(100, JLabel.getheight()); 

我改成:

JLabel.setPreferredSize(100, 22); 
+0

最有可能'getHeight()'返回'0',所以你的標籤沒有空間顯示正確,因此根本沒有顯示。 –

2

你的按鈕的功能可能是一項非常長的任務,你想讓用戶瞭解這個過程。

要做到這一點,你必須創建一個新的線程執行長任務,當你設置新文本到標籤,包裹label.setText()聲明爲invokeLater()

public void buttonAction() 
{ 
    new Thread(new Runnable() 
    { 
     public void run() 
     { 
      // Here your long task 

      // When you want to call Label.setText(), do it like this: 
      SwingUtilities.invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        label.setText("Loading 1/13..."); 
       } 
      }); 

      // Here another part of your task.... 

      SwingUtilities.invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        label.setText("Done!"); 
       } 
      }); 
     } 
    }).start(); 
} 
1

對於在Swing調整組件大小,最終父容器的佈局對組件的大小有最終的說法。

例如,在FlowLayout,呼籲setPreferredSize()setSize(),或setMaximumSize()部件上都給予該大小,而不是大小在它的標籤結果。但是,setMinimumSize()將從該尺寸開始,然後大於該尺寸。

對於BorderLayout,如果組件被添加到中心,沒有上漿方法影響組件 - 它只是需要的可用空間的最大金額。

如果您將父容器的佈局設置爲null,則可以顯式調整組件大小,但是,您將失去使用其他佈局的自動調整大小。

-1

JLabel.setPreferredSize(100,JLabel.getheight());

由於您在這裏設置首選大小,JLabel的高度一定不要以前設置:),如果您在設置高度後嘗試同一行,我認爲它應該可以很好地工作。

有時還需要JPanel<xx>.updateUI();刷新顯示的用戶界面。 enter code here

+0

updateUI不適用於應用程序代碼!和[使用setPreferredSize](http://stackoverflow.com/a/7229519/203657)是非常不理想的(但不會在QA的背景下得到downvote本身有點老式) – kleopatra

+0

什麼updateUI是什麼用於那麼?我已經看到它爲刷新我的面板工作,但我可能是完全錯誤的。 – dguitarbite

相關問題