在空JCombobox中添加水印

时间:2009-11-26 20:18:44

标签: java swing jcombobox

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

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

2 个答案:

答案 0 :(得分:5)

这是一个简单的东西我扔在一起。我相信你可以整理一下。由于代码适用于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 :(得分:0)

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