Swing/ButtonGroupFocusTraversalPolicy のバックアップ(No.12)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ButtonGroupFocusTraversalPolicy へ行く。
- 1 (2016-01-18 (月) 00:11:07)
- 2 (2016-01-19 (火) 16:15:30)
- 3 (2016-05-10 (火) 16:19:43)
- 4 (2016-06-17 (金) 19:41:16)
- 5 (2017-01-18 (水) 19:37:27)
- 6 (2017-04-07 (金) 13:51:51)
- 7 (2017-12-05 (火) 18:47:41)
- 8 (2018-02-24 (土) 19:51:30)
- 9 (2018-11-02 (金) 20:08:42)
- 10 (2020-11-03 (火) 00:16:25)
- 11 (2022-08-20 (土) 22:15:25)
- 12 (2022-09-27 (火) 17:25:14)
- category: swing
folder: ButtonGroupFocusTraversalPolicy
title: ButtonGroup内で最初にフォーカスを取得するJRadioButtonを変更する
tags: [ButtonGroup, FocusTraversalPolicy, JRadioButton, Focus]
author: aterai
pubdate: 2016-01-18T00:09:46+09:00
description: Tabキーによるフォーカス移動が発生した場合、ButtonGroup内で現在選択されているJRadioButtonにフォーカスが移動するよう設定します。
image:
hreflang:
href: https://java-swing-tips.blogspot.com/2016/05/the-jradiobutton-that-is-currently_10.html lang: en
概要
Tabキーによるフォーカス移動が発生した場合、ButtonGroup
内で現在選択されているJRadioButton
にフォーカスが移動するよう設定します。
Screenshot
Advertisement
サンプルコード
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 in GitHub: Java, Kotlin解説
Default
デフォルトのLayoutFocusTraversalPolicy
では、JRadioButton
の選択状態には無関係に、レイアウト内のグループ先頭にあるJRadioButton
にフォーカスが移動する- JDK-8033699 Incorrect radio button behavior - Java Bug Systemで修正済みで、デフォルトで以下と同じ動作をするようになった
OracleJDK 1.8.0_192
で再発している?OpenJDK 11.0.1
では修正されている
FocusTraversalPolicy
JRadioButton
を配置したパネルにgetDefaultComponent(...)
メソッドをオーバーライドしたFocusTraversalPolicy
を設定し現在選択されているJRadioButton
が存在する場合は、そこにフォーカスが移動する- パネルに設定した
FocusTraversalPolicy
を有効にするためにJPanel#setFocusTraversalPolicyProvider(true);
を設定する必要がある
参考リンク
- java - Get the focus in a ButtonGroup of JRadioButtons to go to the currently selected item instead of first - Stack Overflow
- JDK-8033699 Incorrect radio button behavior - Java Bug System
- JDK-8154043 Fields not reachable anymore by tab-key, because of new tabbing behaviour of radio button groups. - Java Bug System