概要
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((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, Kotlin解説
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() { ^