概要

JLabelにニーモニックを設定し、これに関連付けしたJTextFieldへのフォーカス移動を行います。

サンプルコード

JLabel label = new JLabel("Mail Adress: ");
label.setDisplayedMnemonic('M');
JTextField textField = new JTextField(12);
label.setLabelFor(textField);
view all

解説

上記のサンプルでは、JLabelsetDisplayedMnemonic(...)メソッドを使って、ニーモニックを設定し、setLabelFor(...)メソッドでニーモニックがアクティブになった時にフォーカス移動の対象となるコンポーネントを指定しています。

  • 編集不可のJComboBoxなどで、この方法ではフォーカスが移動しない?
    • Tabキーなどによるフォーカス移動やJComboBox#requestFocusInWindow()を実行した場合のようにならない
  • JLabel#setLabelFor(Component) (Java Platform SE 6)
    • 「ニーモニックがアクティブになったときに、labelForプロパティーで指定されているコンポーネントのrequestFocusメソッドを呼び出します。」
  • JTextComponent#setFocusAccelerator(char) (Java Platform SE 6)
    • ニーモニックを表示する必要がない場合は、JTextComponentなどに直接JTextComponent#setFocusAccelerator(char)でフォーカスアクセラレータキーを設定することも可能(JLabel#setLabelFor(Component)と合わせて設定しても、どちらも有効)

参考リンク

コメント