在空JCombobox中添加水印

我正在尝试重现Firefox或Safari的搜索字段的行为,或者本页面右上角的stackoverflow.com搜索字段。

我的意思是,当可编辑的JComboBox上没有文本时,会显示一条指令文本,例如"Type here"或其他任何内容。 当JComboBox聚焦时,文本将被删除。 如果在没有输入文本的情况下丢失焦点,则返回指令文本。

这是一个简单的东西我扔在一起。 我相信你可以整理一下。 由于代码适用于JTextField,因此您需要获取combobox的编辑器。 我没有关于Glazed列表是如何实现的,所以我只是猜测它会对你有用。

 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.event.*; import javax.swing.text.*; public class TextPrompt extends JLabel implements FocusListener, DocumentListener { private JTextComponent component; private Document document; public TextPrompt(String text, JTextComponent component) { this.component = component; document = component.getDocument(); setText( text ); setFont( component.getFont() ); setBorder( new EmptyBorder(component.getInsets()) ); component.addFocusListener( this ); document.addDocumentListener( this ); component.add( this ); } public void checkForPrompt() { if (document.getLength() == 0) setSize( component.getSize() ); else setSize(0, 0); } // Implement FocusListener public void focusGained(FocusEvent e) { checkForPrompt(); } public void focusLost(FocusEvent e) { setSize(0, 0); } // Implement DocumentListener public void insertUpdate(DocumentEvent e) { checkForPrompt(); } public void removeUpdate(DocumentEvent e) { checkForPrompt(); } public void changedUpdate(DocumentEvent e) {} public static void main(String[] args) { JPanel panel = new JPanel(); JTextField tf1 = new JTextField(10); panel.add(tf1); JTextField tf2 = new JTextField(10); panel.add(tf2); new TextPrompt("First Name", tf1); new TextPrompt("Last Name", tf2); JFrame frame = new JFrame(); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.add(panel); frame.pack(); frame.setLocationRelativeTo( null ); frame.setVisible(true); } } 

它被称为水上标记 。 jQuery有一个。 我从不厌倦将水印应用于jComboBox。
祝你好运