2013-02-16 23 views
4

我想创建一个带有内部消息的JTextField作为deafult。但不是一个正确的文本,而是一个关于在JTextField中输入内容的注释。 因此,如果我键入jtf.getText()它将返回null或空,因为它只是在那里打印的注释。当你点击它时,它会消失,你可以写任何你想要的东西。有没有办法做这样的事情?如何在JTextField中显示默认消息java

+0

在最新的SwingLabs,SwingX库中查看[提示支持](http://weblogs.java.net/blog/kschaefe/archive/2010/07/15/swingx-using-promptsupport) – MadProgrammer 2013-02-16 23:28:25

+0

请参阅也[[TextPrompt]](http://stackoverflow.com/q/1805486/230513)。 – trashgod 2013-02-16 23:31:11

+1

在[文本提示](http://tips4java.wordpress.com/2009/11/29/text-prompt/)博客条目中可以找到上面链接到@trashgod的文本提示的更高级和更有趣的版本。 – camickr 2013-02-17 01:30:14

回答

5

我相信你想要的是input hint在文本字段中,像下面的图片:

input hint

检查xswingx库,可以做到这一点。

+0

这正是我想要的:D thx,我会尽力找到它 – 2013-02-16 23:42:51

+0

发现这有点难以使用。这个提示类不是Java的API的一部分吗?加上我想用jtextfield – 2013-02-16 23:48:19

+2

这是现在除了SwingX库。 @GustavoBaiocchiCosta没有套件不是标准库的一部分。更好地下载最新版本的SwingX(恕我直言),并从内存中,它就像调用PromptSupport.setPromot(“提示”,文本框)。查看我在man部分的评论中的链接 – MadProgrammer 2013-02-17 02:38:01

5

一种可能的技术是首先设置默认字符串作为文本框的文本:

JTextField myField = new JTextField("Default Text"); 

然后用FocusListener,从而当用户把焦点中的元件,所述文本消失:

myField.addFocusListener(new FocusListener() { 
    public void focusGained(FocusEvent e) { 
     myField.setText(""); 
    } 

    public void focusLost(FocusEvent e) { 
     // nothing 
    } 
}); 

但是您必须小心:如果用户从不将焦点放在文本字段中,getText()将返回默认字符串。因此,你最好管理一个布尔值,告诉文本字段是否有焦点。

+0

这非常有帮助。我设法解决我的问题。非常感谢! – 2013-02-17 00:21:32