• category: swing folder: LabelForDisplayedMnemonic title: JLabelに設定したニーモニックでフォーカス移動 tags: [JLabel, JTextField, Mnemonic] author: aterai pubdate: 2012-08-20T15:34:19+09:00 description: JLabelにニーモニックを設定し、これに関連付けしたJTextFieldへのフォーカス移動を行います。 image: https://lh4.googleusercontent.com/-c8oDt2QGtY0/UDHQKTuRMGI/AAAAAAAABRQ/dzH-cDi9lEw/s800/LabelForDisplayedMnemonic.png

概要

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

サンプルコード

JLabel label = new JLabel("Mail Adress: ");
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)と合わせて設定しても、どちらも有効)

参考リンク

コメント