Swing/KeySelectionManager のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/KeySelectionManager へ行く。
- 1 (2018-08-27 (月) 16:15:10)
- 2 (2020-08-19 (水) 13:28:41)
- 3 (2022-01-15 (土) 15:19:21)
- 4 (2025-01-03 (金) 08:57:02)
- 5 (2025-01-03 (金) 09:01:23)
- 6 (2025-01-03 (金) 09:02:38)
- 7 (2025-01-03 (金) 09:03:21)
- 8 (2025-01-03 (金) 09:04:02)
- 9 (2025-06-19 (木) 12:41:37)
- 10 (2025-06-19 (木) 12:43:47)
- 11 (2025-12-17 (水) 21:26:08)
- category: swing folder: KeySelectionManager title: JComboBoxでキー入力による項目選択を無効にする tags: [JComboBox] author: aterai pubdate: 2018-08-27T16:10:35+09:00 description: JComboBoxのドロップダウンリストで項目の先頭文字などがキー入力と一致する場合の項目選択を無効にします。 image: https://drive.google.com/uc?id=114_GR1TDfMUrd7kaOi0H3VyK1g_fTZ60sQ
概要
JComboBoxのドロップダウンリストで項目の先頭文字などがキー入力と一致する場合の項目選択を無効にします。
Screenshot

Advertisement
サンプルコード
JComboBox<String> combo1 = new JComboBox<String>(makeModel()) {
@Override public boolean selectWithKeyChar(char keyChar) {
return false;
}
};
JComboBox<String> combo2 = new JComboBox<>(makeModel());
combo2.setKeySelectionManager(new JComboBox.KeySelectionManager() {
// Java 10: @Override public int selectionForKey(char key, ComboBoxModel<?> model) {
@Override public int selectionForKey(char key, ComboBoxModel model) { // Java 9
return -1;
}
});
View in GitHub: Java, Kotlin解説
BasicComboBoxUI#DefaultKeySelectionManager- 編集不可に設定された
JComboBoxのデフォルトKeySelectionManagerは、BasicComboBoxUI#DefaultKeySelectionManager- 内部で
JList#getNextMatch(...)メソッドを使用している
- 内部で
JComboBox#DefaultKeySelectionManagerも存在するが、BasicComboBoxUI#DefaultKeySelectionManagerより低機能?JList#getNextMatch(...)を使用していない、UIManager.get("ComboBox.timeFactor")などが無効で二文字目以降の入力が無効など
- 編集可能な
JComboBoxで入力した文字列をドロップダウンリスト中での選択項目に設定する場合は、別途PopupMenuListenerなどを使用して選択を変更する必要がある
- 編集不可に設定された
disable JComboBox#selectWithKeyChar(...)JComboBox#selectWithKeyChar(...)をオーバーライドしてキー入力による項目選択を無効化JComboBox#setKeySelectionManager(null)を設定してもJComboBox#selectWithKeyChar(...)内でJComboBox#DefaultKeySelectionManagerが復元されてしまうので、オーバーライドして常にfalseを返すよう設定
disable KeySelectionManager#selectionForKey(...)KeySelectionManager#selectionForKey(...)をオーバーライドしてキー入力による項目選択を無効化Java 9で@Override public int selectionForKey(char key, ComboBoxModel<?> model) {のようにオーバーライドすると以下のようなエラーになるエラー: <anonymous example.MainPanel$2>はabstractでなく、KeySelectionManager内のabstractメソッドselectionForKey(char,ComboBoxModel)をオーバーライドしません combo3.setKeySelectionManager(new JComboBox.KeySelectionManager() { ^