2011-04-11 90 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));