• category: swing folder: ShowPopupOnNavigation title: JComboBoxのドロップダウンリストを上矢印キーでも開くよう設定する tags: [JComboBox, LookAndFeel, InputMap] author: aterai pubdate: 2021-04-05T00:02:26+09:00 description: JComboBoxにフォーカスがある場合下矢印キーだけではなく上矢印キーでもドロップダウンリストを開くよう設定します。 image: https://drive.google.com/uc?id=1BL5XXUe_94Ivcqyzfx8mJbhRgpboDdpz

概要

JComboBoxにフォーカスがある場合下矢印キーだけではなく上矢印キーでもドロップダウンリストを開くよう設定します。

サンプルコード

private static final String SHOW_POPUP_NAVI = "ComboBox.showPopupOnNavigation";

JLabel help = new JLabel("This setting only responds to the upwards arrow key↑");
help.setAlignmentX(0f);

JCheckBox check = new JCheckBox(SHOW_POPUP_NAVI);
check.setFocusable(false);
check.addActionListener(e -> UIManager.put(SHOW_POPUP_NAVI, check.isSelected()));

JComboBox<String> combo = new JComboBox<String>(makeModel()) {
  @Override public void updateUI() {
    super.updateUI();
    boolean flg = UIManager.getLookAndFeelDefaults().getBoolean(SHOW_POPUP_NAVI);
    UIManager.put(SHOW_POPUP_NAVI, flg);
    check.setSelected(flg);
  }
};
combo.setSelectedIndex(5);
combo.setAlignmentX(0f);
View in GitHub: Java, Kotlin

解説

  • ComboBox.showPopupOnNavigation: false
    • デフォルト
    • JComboBoxにフォーカスが存在する状態で上矢印キーを入力してもドロップダウンリストは開かない
    • 下矢印キーを入力すればComboBox.showPopupOnNavigationに無関係にドロップダウンリストが開く
  • ComboBox.showPopupOnNavigation: true
    • JComboBoxにフォーカスが存在する状態で上矢印キーを入力すると下矢印キーと同様にドロップダウンリストが開く

  • selectPrevious
    • ComboBox.showPopupOnNavigationの設定はselectPreviousアクション内でのみ使用されるため、MetalLookAndFeelMotifLookAndFeelでのみ有効
  • selectPrevious2
    • ComboBox.showPopupOnNavigationの設定はselectPrevious2アクションでは参照されないため、WindowsLookAndFeelNimbusLookAndFeelでは無効
    • selectPrevious2アクションではJComboBoxが編集不可の場合は上矢印キーでドロップダウンリストは開かず選択アイテムが移動する
      • 編集不可のJComboBoxでドロップダウンリストをキー入力で開く場合はF4Alt+↑キーなどを使用する
    • selectPrevious2アクションではJComboBoxが編集可能の場合は上矢印キーでドロップダウンリストが開き選択アイテムは移動しない
      • ドロップダウンリストが開いた状態で上矢印キーを入力すると選択アイテムが移動する
  • selectNext2
    • selectNext2アクションではJComboBoxが編集不可の場合は下矢印キーでドロップダウンリストは開かず選択アイテムが移動する
      • 編集不可のJComboBoxでドロップダウンリストをキー入力で開く場合はF4Alt+↓キーなどを使用する
    • selectNext2アクションではJComboBoxが編集可能、またはJTableのセルエディタになっている場合は下矢印キーでドロップダウンリストが開く

参考リンク

コメント