JComboBoxのポップアップメニューでEnterキーが入力された場合のActionListenerの動作をテストする
Total: 3512
, Today: 6
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
編集可能なJComboBox
のポップアップメニューでEnterキーが入力された場合のActionListener
の動作をテストします。
Screenshot
Advertisement
サンプルコード
解説
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(...)
メソッドをオーバーライドして実行
参考リンク
- JComboBox#addActionListener(ActionListener) (Java Platform SE 8)
- JTextFieldにActionListenerを追加する
- JComboBoxのドロップダウンリストでカーソルキーナビゲーションを無効にする