概要

Tabキーによるフォーカス移動が発生した場合、ButtonGroup内で現在選択されているJRadioButtonにフォーカスが移動するよう設定します。

サンプルコード

buttons.setFocusTraversalPolicyProvider(true);
buttons.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {
  @Override public Component getDefaultComponent(Container focusCycleRoot) {
    return Stream.of(focusCycleRoot.getComponents())
                 .filter(c -> ((JRadioButton) c).getModel().equals(selection))
                 .findFirst().orElse(super.getDefaultComponent(focusCycleRoot));
  }
});
view all

解説

  • Default
    • デフォルトのLayoutFocusTraversalPolicyでは、JRadioButtonの選択状態には無関係に、レイアウトの先頭にあるJRadioButtonにフォーカスが移動する
  • FocusTraversalPolicy
    • JRadioButtonを配置したパネルにgetDefaultComponent(...)メソッドをオーバーライドしたFocusTraversalPolicyを設定し、現在選択されているJRadioButtonが存在する場合は、それにフォーカスを移動する
    • パネルに設定したFocusTraversalPolicyを有効にするために、JPanel#setFocusTraversalPolicyProvider(true);を設定する必要がある

参考リンク

コメント