我正在寻找一种将示例文本放入JTextField的方法,并将其变为灰色。示例文本应该在任何东西输入到该文本字段后立即消失。一些类似于当用户使用标题字段发布问题时的计算器功能。JTextField中的示例文本
如果它已经是JTextField的扩展实现,那么我可以放入它作为一个简单的替换,我想它。任何来自swingx的东西都可以工作。我猜如果没有一个简单的方法来做到这一点,我的选择可能会重写JTextField的paint方法做这样的事情。
感谢
我正在寻找一种将示例文本放入JTextField的方法,并将其变为灰色。示例文本应该在任何东西输入到该文本字段后立即消失。一些类似于当用户使用标题字段发布问题时的计算器功能。JTextField中的示例文本
如果它已经是JTextField的扩展实现,那么我可以放入它作为一个简单的替换,我想它。任何来自swingx的东西都可以工作。我猜如果没有一个简单的方法来做到这一点,我的选择可能会重写JTextField的paint方法做这样的事情。
感谢
Text Prompt类提供所需的功能,而无需使用一个自定义的JTextField。
而不是覆盖,把一个价值在该领域,并添加KeyListener
当击键被注册,将删除该值。也许它也改变了前景。
你可以将它包装到你自己定制的JTextField
类中,该类将采用构造函数中的默认文本。
你不能用纯文本字段来做到这一点,但是你可以在JTextField
的顶部放置一个禁用的JLabel
,并在文本字段获得焦点时将其隐藏。
如果您可以使用外部库,Jide software的Swing组件具有您正在查找的内容;它被称为LabeledTextField(javadoc),它是JIDE公共层(开源项目)的一部分 - 这是免费的。它正在做什么mklhmnn建议。
如何使用默认文本初始化文本字段并为其指定焦点侦听器,以便在获得焦点时,如果文本.equals默认文本,则调用JTextField上的selectAll()。
做这样的:
定义你喜欢的初始文本字符串,并设置您的文本字段:
String initialText = "Enter your initial text here";
jTextField1.setText(initialText);
添加焦点监听你的文本字段,其中选择TextField的全部内容(如果它仍然具有初始值)。您可以键入的任何内容都会替换整个内容,因为它已被选中。
jTextField1.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
if (jTextField1.getText().equals(initialText)) {
jTextField1.selectAll();
}
}
});
private JLabel l;
JPromptTextField(String prompt) {
l = new JLabel(prompt, SwingConstants.CENTER);
l.setForeground(Color.GRAY);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (this.getText().length() == 0) {
// Reshape the label if needed, then paint
final Rectangle mine = this.getBounds();
final Rectangle its = l.getBounds();
boolean resized = (mine.width != its.width) || (mine.height != its.height);
boolean moved = (mine.x != its.x) || (mine.y != its.y);
if (resized || moved)
l.setBounds(mine);
l.paint(g);
}
}
您不能使用密钥侦听器,因为可以通过其他方法(如复制和粘贴)输入数据。 – 2011-02-18 18:01:05
我实际上不会在值字段中添加此示例文本,因为存在使用getText()检索示例文本的风险 – dm76 2011-02-18 18:01:17
@Hover,我首先想到了焦点侦听器,但在SO标题示例中作为一个例子,OP提到,文本不会在焦点上消失,而是在开始输入时消失。如果你确实允许粘贴添加一个DocumentListener可能是一个更好的解决方案。 – jzd 2011-02-18 19:24:16