Swing/ComboBoxDropdownSelection のバックアップの現在との差分(No.2)
- category: swing folder: ComboBoxDropdownSelection title: JComboBoxで編集した文字列をドロップダウンリストで選択する tags: [JComboBox, JPopupMenu, PopupMenuListener] author: aterai pubdate: 2015-12-28T00:09:10+09:00 description: JComboBoxで編集した後の文字列がドロップダウンリスト中に存在する場合、そのアイテムを選択するように設定します。 image:
概要
JComboBox
で編集した後の文字列がドロップダウンリスト中に存在する場合、そのアイテムを選択するように設定します。
Screenshot
Advertisement
サンプルコード
class SelectItemMenuListener implements PopupMenuListener {
@Override public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
JComboBox c = (JComboBox) e.getSource();
JComboBox<?> c = (JComboBox<?>) e.getSource();
c.setSelectedItem(c.getEditor().getItem());
}
@Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
@Override public void popupMenuCanceled(PopupMenuEvent e) {}
#spanadd
#spanend
@Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
/* not needed */
}
#spanadd
#spanend
@Override public void popupMenuCanceled(PopupMenuEvent e) {
/* not needed */
}
}
View in GitHub: Java, Kotlin解説
Default
-
123456
を編集してa
に変更し、ドロップダウンリストを開くと、123456
が選択状態 -
"123456"
を編集して"a"
に変更しドロップダウンリストを開くと"123456"
が選択状態になる
-
popupMenuWillBecomeVisible
-
123456
を編集してa
に変更し、ドロップダウンリストを開くと、a
が選択状態 -
"123456"
を編集して"a"
に変更しドロップダウンリストを開くと"a"
が選択状態になる PopupMenuListener
を追加し、popupMenuWillBecomeVisible(...)
メソッドで編集された文字列がドロップダウンリストに存在する場合は選択する- ドロップダウンリストを開いたときに編集後の文字列がリストに存在しない場合は、選択状態はクリアされる
- ドロップダウンリストを開いたときに編集後の文字列がリストに存在しない場合は選択状態がクリアされる
-
+enterPressed Action
-
123456
を編集して123456a
に変更しEnter、次に文字列をa
に変更してから、ドロップダウンリストを開くと、リストに123456a
が追加され、a
が選択状態 -
"123456"
を編集して"123456a"
に変更しEnter、次に文字列を"a"
に変更してからドロップダウンリストを開くと、リストに"123456a"
が追加され"a"
が選択状態になる - Enterキーを押した場合、アイテムを追加するアクションを
ActionMap
に追加
-
#spandel
Action defalutEnterPressedAction = getActionMap().get(ENTER_PRESSED);
#spanend
#spanadd
Action defaultEnterPressedAction = getActionMap().get(ENTER_PRESSED);
#spanend
Action a = new AbstractAction() {
@Override public void actionPerformed(ActionEvent e) {
boolean isPopupVisible = isPopupVisible();
setPopupVisible(false);
DefaultComboBoxModel<String> m = (DefaultComboBoxModel<String>) getModel();
String str = Objects.toString(getEditor().getItem(), "");
if (m.getIndexOf(str) < 0) {
m.removeElement(str);
m.insertElementAt(str, 0);
if (m.getSize() > 10) {
m.removeElementAt(10);
}
setSelectedIndex(0);
setPopupVisible(isPopupVisible);
} else {
defalutEnterPressedAction.actionPerformed(e);
defaultEnterPressedAction.actionPerformed(e);
}
}
};
getActionMap().put(ENTER_PRESSED, a);