0
JTextFieldに透かし文字を入れるには?
JTextFieldに透かし文字を入れたいと思い、ネット検索でサンプルコードを見つけてコードを組み込んでみたのですが、現状ではJTextFieldに「大会名を入力してください」という文字は表示されるのですが透かし文字ではないですし、JTextField内にカーソルを置いてみても無反応な状態です。
基礎的なことで申し訳ありませんが、どうか教えて下さい。
よろしくお願いします。
以下はコードです。
public class RallyInfomationP extends JPanel {
private JLabel jLabel1;
private JTextField jTextField0 = new JTextField("大会名を入力してください");
public RallyInfomationP() {
initComponents();
}
private void initComponents() {
setBorder(BorderFactory.createTitledBorder(new LineBorder(new Color(0,128,0), 2, true), "大会情報", TitledBorder.LEFT, TitledBorder.TOP, new Font("Dialog",
Font.BOLD, 16), new Color(0,128,0)));
setLayout(new GroupLayout());
add(getJTextField0(), new Constraints(new Leading(60, 158, 12, 12), new Leading(5, 30, 12, 12)));
add(getJLabel1(), new Constraints(new Leading(7, 12, 12), new Leading(7, 12, 12)));
setSize(232, 198);
}
//大会名のテキストフィールド
private JTextField getJTextField0() {
if (jTextField0 == null) {
jTextField0 = new JTextField();
jTextField0.setFont(new Font("Dialog", Font.PLAIN, 16));
jTextField0.setText("");
jTextField0.setForeground(Color.BLACK);
//以下のコードがリスナー
jTextField0.addFocusListener(new PlaceholderFocusListener(jTextField0));
}
return jTextField0;
}
//大会名のラベル
private JLabel getJLabel1() {
if (jLabel1 == null) {
jLabel1 = new JLabel();
jLabel1.setFont(new Font("Dialog", Font.BOLD, 18));
jLabel1.setText("大会名");
}
return jLabel1;
}
}
//---2012.09.21---透かし文字を入れるためのリスナー
class PlaceholderFocusListener implements FocusListener {
private static final Color INACTIVE = UIManager.getColor("TextField.inactiveForeground");
private final String hintMessage;
public PlaceholderFocusListener(JTextComponent tf) {
hintMessage = tf.getText();
tf.setForeground(INACTIVE);
}
@Override public void focusGained(FocusEvent e) {
JTextComponent tf = (JTextComponent)e.getSource();
if(hintMessage.equals(tf.getText()) && INACTIVE.equals(tf.getForeground())) {
tf.setForeground(UIManager.getColor("TextField.foreground"));
tf.setText("");
}
}
@Override public void focusLost(FocusEvent e) {
JTextComponent tf = (JTextComponent)e.getSource();
if("".equals(tf.getText().trim())) {
tf.setForeground(INACTIVE);
tf.setText(hintMessage);
}
}
}