我試圖重現Firefox或Safari的搜索字段或本頁面右上角的搜索字段stackoverflow.com
的行爲。在空的空間添加水印JCombobox
我的意思是,當可編輯JComboBox
上沒有文字時,會顯示說明文字,如"Type here"
或其他。當JComboBox
聚焦時,文本被刪除。如果在沒有輸入文字的情況下焦點丟失,說明文字會回來。
我試圖重現Firefox或Safari的搜索字段或本頁面右上角的搜索字段stackoverflow.com
的行爲。在空的空間添加水印JCombobox
我的意思是,當可編輯JComboBox
上沒有文字時,會顯示說明文字,如"Type here"
或其他。當JComboBox
聚焦時,文本被刪除。如果在沒有輸入文字的情況下焦點丟失,說明文字會回來。
這裏有一些簡單的我扔在一起。我相信你可以整理它。由於代碼在JTextField上工作,您需要獲取組合框的編輯器。我沒有關於如何實施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);
}
}
幾乎適合我的使用情況已知的術語。我只做了三個改變:1)當關注時,必須沒有文本,所以我在checkForPrompt上添加了「&&!component.hasFocus」。 2)在focusLost上我調用checkForPrompt而不是setSize。 3)啓動時必須有一個checkForPrompt調用,用於初始可見性狀態。此調用必須在佈局大小計算後進行,否則component.getSize()將爲0. 謝謝! – tuler 2009-11-27 00:34:50
此課程已更新爲更多功能。請參閱:[文本提示](http://tips4java.wordpress.com/2009/11/29/text-prompt/) – camickr 2013-02-17 01:17:52