Summary
JComboBoxのドロップダウンリストで項目の先頭文字などがキー入力と一致する場合の項目選択を無効にします。
Screenshot

Advertisement
Source Code Examples
JComboBox<String> combo1 = new JComboBox<String>(makeModel()) {
@Override public boolean selectWithKeyChar(char keyChar) {
return false;
}
};
JComboBox<String> combo2 = new JComboBox<>(makeModel());
combo2.setKeySelectionManager((key, model) -> -1);
// 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, KotlinDescription
BasicComboBoxUI#DefaultKeySelectionManager- 編集不可に設定された
JComboBoxのデフォルトKeySelectionManagerはBasicComboBoxUI#DefaultKeySelectionManager- 内部で
JList#getNextMatch(...)メソッドを使用している
- 内部で
JComboBox#DefaultKeySelectionManagerも存在するがJList#getNextMatch(...)を使用していない、UIManager.get("ComboBox.timeFactor")などが無効で二文字目以降の入力が無効などの制限があり、BasicComboBoxUI#DefaultKeySelectionManagerより低機能?JList#getNextMatch(...)を使用していない、UIManager.get("ComboBox.timeFactor")などが無効で二文字目以降の入力が無効など
- 編集可能な
JComboBoxで入力した文字列をドロップダウンリスト中での選択項目に設定する場合はKeySelectionManagerを使用できないので別途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() { ^