JComboBoxのポップアップメニューでEnterキーが入力された場合のActionListenerの動作をテストする
Total: 4004, Today: 1, Yesterday: 0
Posted by aterai at
Last-modified:
Summary
編集可能なJComboBoxのポップアップメニューでEnterキーが入力された場合のActionListenerの動作をテストします。
Screenshot

Advertisement
Source Code Examples
Description
ComboBox.isEnterSelectablePopup: false(default)- ポップアップメニューが閉じている状態でEnterキー入力やフォーカス移動で編集を終了するとアクションイベントが
2回発生する- このアクションイベントで
JComboBox#getSelectedItem()を実行するとエディタの値が取得される
- このアクションイベントで
- ポップアップメニューが開いている状態でEnterキーを入力するとアクションイベントが
1回発生する- 編集不可の
JComboBoxの場合と同じ動作 - このアクションイベントで
JComboBox#getSelectedItem()を実行するとリストアイテムの値が取得される
- 編集不可の
- 編集可能な
JComboBoxのポップアップメニューを開き、マウスカーソルでハイライトを移動してEnterキーを入力してもポップアップメニューは非表示になるが選択状態は変化しない
- ポップアップメニューが閉じている状態でEnterキー入力やフォーカス移動で編集を終了するとアクションイベントが
ComboBox.isEnterSelectablePopup: true- ポップアップメニューが閉じている状態でEnterキー入力やフォーカス移動で編集を終了するとアクションイベントが
2回発生する- このアクションイベントで
JComboBox#getSelectedItem()を実行するとエディタの値が取得される
- このアクションイベントで
- ポップアップメニューが開いている状態でEnterキーを入力するとアクションイベントが
2回発生する - 編集可能な
JComboBoxのポップアップメニューを開き、マウスカーソルでハイライトを移動してEnterキーを入力するとハイライトされているアイテムが選択されてポップアップメニューは非表示になる- このアクションイベントで
JComboBox#getSelectedItem()を実行するとリストアイテムの値が取得される
- このアクションイベントで
- 詳細は
javax/swing/plaf/basic/BasicComboBoxUI.javaを参照// Forces the selection of the list item boolean isEnterSelectablePopup = UIManager.getBoolean("ComboBox.isEnterSelectablePopup"); if (!comboBox.isEditable() || isEnterSelectablePopup || ui.isTableCellEditor) { Object listItem = ui.popup.getList().getSelectedValue(); if (listItem != null) { // Use the selected value from popup // to set the selected item in combo box, // but ensure before that JComboBox.actionPerformed() // won't use editor's value to set the selected item comboBox.getEditor().setItem(listItem); comboBox.setSelectedItem(listItem); } } comboBox.setPopupVisible(false);
- ポップアップメニューが閉じている状態でEnterキー入力やフォーカス移動で編集を終了するとアクションイベントが
JComboBox#addItemListener(...)で追加したItemListenerにはこの設定は影響しないUIManager.getBoolean("ComboBox.noActionOnKeyNavigation") == trueの場合、この設定は無視されComboBox.isEnterSelectablePopup: trueと同じ動作になる- JComboBoxのドロップダウンリストでカーソルキーナビゲーションを無効にする?
- ポップアップメニューが開いている状態で、Enterキーを入力するとアクションイベントが
2回発生する
ComboBox.isEnterSelectablePopupの設定はEnterキーが入力されると毎回UIManager.getBoolean("ComboBox.isEnterSelectablePopup")で取得されるので、切替はPopupMenuListener#popupMenuWillBecomeVisible(...)メソッドをオーバーライドして実行
Reference
- JComboBox#addActionListener(ActionListener) (Java Platform SE 8)
- JTextFieldにActionListenerを追加する
- JComboBoxのドロップダウンリストでカーソルキーナビゲーションを無効にする