• category: swing folder: DefaultButtonFollowsFocus title: DefaultButtonをフォーカスが存在するJButtonに設定する tags: [JButton, Focus, JRootPane] author: aterai pubdate: 2020-02-24T18:13:51+09:00 description: DefaultButtonではないJButtonにフォーカスが存在する場合、そのJButtonがDefaultButtonとしてふるまうよう設定します。 image: https://drive.google.com/uc?id=1psyQVTV93zuNxaZxHISe8XkyPWTPAS7Z

概要

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

サンプルコード

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 in GitHub: Java, Kotlin

解説

  • 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音は鳴らない

参考リンク

コメント