4

stackoverflow.comFirefox や Safari の検索フィールド、またはこのページの右上にあるの検索フィールドの動作を再現しようとしています。

つまり、 editableJComboBoxにテキストがない場合、指示テキストが表示されます"Type here"。がJComboBoxフォーカスされると、テキストが削除されます。テキストを入力せずにフォーカスが失われると、指示テキストが戻ってきます。

4

2 に答える 2

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);
    }
}
于 2009-11-26T21:13:45.400 に答える
0

これはwaterMarkと呼ばれます。jQueryには1つあります。jComboBox に透かしを適用するのに飽きたことはありません。
幸運を

于 2009-11-26T20:53:54.757 に答える