概要

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

サンプルコード

JLabel label = new JLabel("Mail Address: ");
label.setDisplayedMnemonic('M');
JTextField textField = new JTextField(12);
label.setLabelFor(textField);
View in GitHub: Java, Kotlin

解説

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

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

参考リンク

コメント