TzijonikプログラムをJavaに移植中。
で、JPanelを用いてGUIで作っているけど、ユーザーの入力欄に「ここにメッセージを入力する」ということを伝えるためにヒント(hint/prompt text)を表示したいを思った。
ヒント情報はテキストを入力する際には消えてくれないとヒントそのものも入力されてしまうので、そういう仕様のものを探してみた。色々探したけど、中々思った様なものが無かったので結局自分で書くことに。備忘録として残しておく。
まぁ、そんな大したものではないけど。
ポイントとしてはActionListenerインターフェイスを継承することと、addFocusListenerをオーバーライドするだけ。オーバーライドで好む仕様に変えればいい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
inputField = new JTextField(""); inputField.setFont(new Font("Courier New", Font.PLAIN, 24)); //font if(inputField.getText().length()==0){ inputField.setText("Tz'ij"); inputField.setForeground(Color.BLUE); } inputField.addFocusListener(new FocusListener(){ @Override public void focusGained(FocusEvent e){ putField.setText(""); inputField.setForeground(Color.BLACK); } @Override public void focusLost(FocusEvent e){ if(inputField.getText().length()==0){ inputField.setText("Tz'ij"); inputField.setForeground(Color.BLUE); } } }); |

こんな風に出力される。ヒント情報は実際には灰色で表示させているけど、ここでは分かりやすく青で。最初はこう表示されているけど、入力しよう(つまりフォーカスされると)とすると

ヒント情報が消えてなくなる。

入力したテキストはヒント情報の色(今回の例では青)ではなく、黒で表示される。

入力欄からフォーカスが外れ、且つ入力欄に何も入力されていなければ再度ヒントが表示される。
ちなみに「tz’ij」とはマヤ・キチェ語で言葉とか単語という意味。つまり英語で言う「word」をここに入力してというヒント。