概要

DefaultButtonではないJButtonにフォーカスが存在する場合、そのJButtonDefaultButtonとしてふるまうよう設定します。

スクリーンショット

Swing/DefaultButtonFollowsFocus.png

サンプルコード

String KEY = "Button.defaultButtonFollowsFocus";
Box box = Box.createHorizontalBox();
box.setBorder(BorderFactory.createTitledBorder(KEY));
JRadioButton r1 = new JRadioButton("TRUE");
JRadioButton r2 = new JRadioButton("FALSE");
if (UIManager.getBoolean(KEY)) {
  r1.setSelected(true);
} else {
  r2.setSelected(true);
}
ButtonGroup bg = new ButtonGroup();
ActionListener al = e -> UIManager.put(KEY, r1.equals(e.getSource()));
Arrays.asList(r1, r2).forEach(r -> {
  r.addActionListener(al);
  bg.add(r);
  box.add(r);
});
view all

解説

  • UIManager.put("Button.defaultButtonFollowsFocus", Boolean.TRUE)
    • デフォルトボタンではないJButtonにフォーカスがある場合、Enterキー入力でデフォルトボタンではなく現在フォーカスが存在するJButtonがクリックされる
    • たとえば上記のサンプルでデフォルトボタンをButton1、現在のフォーカスをButton2に設定してEnterキーを入力するとButton2がクリックされてBeep音が鳴る
    • WindowsLookAndFeelのデフォルト
  • UIManager.put("Button.defaultButtonFollowsFocus", Boolean.FALSE)
    • デフォルトボタンではないJButtonにフォーカスが存在する場合でも、Enterキー入力で常にデフォルトボタンがクリックされる
    • たとえば上記のサンプルでデフォルトボタンをButton1、現在のフォーカスをButton2に設定してEnterキーを入力するとButton1がクリックされてBeep音は鳴らない

参考リンク

コメント