2011-04-11 127 views
1

我有JLabel帶有圖標和文本。是否有任何可能隱藏只JLabel的文字?我不想隱藏整個組件(setVisible(false)),但只有文本,所以圖標仍然可見。我想仍然使用getText和setText方法。JLabel - 如何隱藏文本?

感謝您的幫助!

+2

「我想仍然使用getText和setText方法。」 *使用它們*,如果不顯示文本?這種設計有一種奇怪的氣味。 – 2011-04-11 14:20:32

回答

2

就我而言,沒有直接的方法來做到這一點。但您可以嘗試以下方法:

  1. 擴展JLabel並覆蓋setText()和getText()方法。這些應該將您給它的文本存儲在一個新的字符串字段中。每次你調用setText時,它只應該委託給super.setText()是你的標籤 - 文本是不可見的。然後你可以添加一個切換可見性的方法。如果用true調用setTextVisibility(),則該類應使用一串空格來調用super.setText()。

這裏是我的意思的例子:

public class MyLabel extends JLabel { 
    private String labelText; 
    private boolean labelTextVisible = true; 

    private MyLabel(String text, Icon icon, int horizontalAlignment) { 
     super(text, icon, horizontalAlignment); 
     labelText = text; 
    } 

    private MyLabel(String text, int horizontalAlignment) { 
     super(text, horizontalAlignment); 
     labelText = text; 
    } 

    private MyLabel(String text) { 
     super(text); 
     labelText = text; 
    } 

    @Override 
    public void setText(String text) { 
     if (labelTextVisible) { 
     super.setText(text); 
     } 
     labelText = text; 
    } 

    @Override 
    public String getText() { 
     return labelText; 
    } 

    public void setLabelTextVisible(boolean labelVisible){ 
     if(labelVisible){ 
     if(!labelText.equals(super.getText())){ 
      super.setText(labelText); 
     } 
     }else{ 
     int spaceCount = super.getText().length(); 
     String hiddenText = ""; 
     for (int i = 0; i < spaceCount; i++) { 
      hiddenText+=" "; 
     } 
     super.setText(hiddenText); 
     } 
     this.labelTextVisible = labelVisible; 
    } 

    public boolean getLabelTextVisible(){ 
     return labelTextVisible; 
    } 
    } 
  1. (這更像是一個黑客,但它可以工作)製作,使文本標籤的把ForegroundColor匹配的背景顏色不再可見。
3

這是太明顯了嗎?

label.setText("");

如果你真的只是想隱藏它,你可以設置前景色是一樣的背景。也許這就足夠了(可能需要防止圖標移動,具體取決於你如何設置對齊方式)。

0

我今天剛遇到這個問題。

我的JLabel有一個圖標,我只需要顯示圖標。我有一個MouseListener,爲此我需要標籤的文本來唯一標識標籤。

我的解決方法是使用setToolTipText()而不是setText(),並在MouseListener中使用​​而不是getText()

3

我也面臨同樣的問題,我的解決方法是簡單地使用setName()getName()方法到位的setText()getText()方法。希望它會有所幫助。 setToolTipText()的問題在於鼠標懸停時顯示工具提示。

0

最簡單的方法是將字體設置爲0! 試一試。工作正常。

label.setFont(new java.awt.Font("Lucida Grande", 1, 0));