Swing/ComboBoxEnterSelectablePopup のバックアップ(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ComboBoxEnterSelectablePopup へ行く。
- category: swing folder: ComboBoxEnterSelectablePopup title: JComboBoxのポップアップメニューでEnterキーが入力された場合のActionListenerの動作をテストする tags: [JComboBox, ActionListener, UIManager] author: aterai pubdate: 2017-07-10T15:41:36+09:00 description: 編集可能なJComboBoxのポップアップメニューでEnterキーが入力された場合のActionListenerの動作をテストします。 image: https://drive.google.com/uc?id=1IRqx7XfCe8R_uKdyEiatC5Ro-ucy_GPnZw
概要
編集可能なJComboBox
のポップアップメニューでEnterキーが入力された場合のActionListener
の動作をテストします。
Screenshot
Advertisement
サンプルコード
解説
ComboBox.isEnterSelectablePopup: false(default)
- ポップアップメニューが閉じている状態でEnterキー入力やフォーカス移動で編集を終了するとアクションイベントが
2
回発生する- このアクションイベントで
JComboBox#getSelectedItem()
を実行するとエディタの値が取得される
- このアクションイベントで
- ポップアップメニューが開いている状態でEnterキーを入力するとアクションイベントが
1
回発生する- 編集不可の
JComboBox
の場合と同じ動作 - このアクションイベントで
JComboBox#getSelectedItem()
を実行するとリストアイテムの値が取得される
- 編集不可の
- ポップアップメニューが閉じている状態でEnterキー入力やフォーカス移動で編集を終了するとアクションイベントが
ComboBox.isEnterSelectablePopup: true
- ポップアップメニューが閉じている状態でEnterキー入力やフォーカス移動で編集を終了するとアクションイベントが
2
回発生する- このアクションイベントで
JComboBox#getSelectedItem()
を実行するとエディタの値が取得される
- このアクションイベントで
- ポップアップメニューが開いている状態でEnterキーを入力するとアクションイベントが
2
回発生する- このアクションイベントで
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
と同じ動作になる- ポップアップメニューが開いている状態で、Enterキーを入力するとアクションイベントが
2
回発生する
- ポップアップメニューが開いている状態で、Enterキーを入力するとアクションイベントが
ComboBox.isEnterSelectablePopup
の設定はEnterキーが入力されると毎回UIManager.getBoolean("ComboBox.isEnterSelectablePopup")
で取得されるので、切替はPopupMenuListener#popupMenuWillBecomeVisible(...)
メソッドをオーバーライドして実行