stackoverflow.com
Firefox や Safari の検索フィールド、またはこのページの右上にあるの検索フィールドの動作を再現しようとしています。
つまり、 editableJComboBox
にテキストがない場合、指示テキストが表示されます"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);
}
}
これはwaterMarkと呼ばれます。jQueryには1つあります。jComboBox に透かしを適用するのに飽きたことはありません。
幸運を