Swing/BasicComboPopup のバックアップ(No.4)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/BasicComboPopup へ行く。
- 1 (2008-01-08 (火) 16:25:30)
- 2 (2008-01-08 (火) 18:18:36)
- 3 (2008-01-10 (木) 17:38:04)
- 4 (2008-01-16 (水) 15:22:10)
- 5 (2008-02-22 (金) 15:13:04)
- 6 (2008-02-22 (金) 17:00:18)
- 7 (2008-04-16 (水) 10:35:44)
- 8 (2008-08-18 (月) 10:19:03)
- 9 (2009-06-09 (火) 20:38:02)
- 10 (2010-12-13 (月) 00:02:39)
- 11 (2012-08-14 (火) 15:25:43)
- 12 (2013-03-22 (金) 11:52:43)
- 13 (2013-07-26 (金) 01:29:00)
- 14 (2013-07-27 (土) 00:56:11)
- 15 (2013-07-31 (水) 23:33:28)
- 16 (2013-08-20 (火) 14:20:43)
- 17 (2013-09-06 (金) 11:36:56)
- 18 (2013-09-08 (日) 02:32:01)
- 19 (2013-12-19 (木) 21:29:45)
- 20 (2014-06-04 (水) 22:13:11)
- 21 (2014-10-29 (水) 01:46:12)
- 22 (2014-11-01 (土) 00:46:09)
- 23 (2014-11-25 (火) 03:03:31)
- 24 (2015-11-24 (火) 03:01:26)
- 25 (2016-08-17 (水) 18:48:32)
- 26 (2016-09-02 (金) 12:36:08)
- 27 (2017-03-30 (木) 14:01:28)
- 28 (2017-11-02 (木) 15:34:40)
- 29 (2018-03-08 (木) 16:52:23)
- 30 (2020-03-17 (火) 18:31:41)
- 31 (2021-09-23 (木) 11:51:26)
- 32 (2022-08-20 (土) 22:15:25)
TITLE:JComboBoxを使ってポップアップメニューをスクロール
JComboBoxを使ってポップアップメニューをスクロール
編集者:Terai Atsuhiro
作成日:2005-10-17
更新日:2021-09-23 (木) 11:51:26
概要
JComboBoxを使ってスクロール可能なポップアップメニューを表示します。
#screenshot
サンプルコード
JComboBox combo = new JComboBox(strArray);
BasicComboPopup popup = new BasicComboPopup(combo) {
public boolean isFocusable() {
return true;
}
protected void installListListeners() {
super.installListListeners();
list.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
append((String)combo.getSelectedItem());
}
});
}
};
- &jnlp;
- &jar;
- &zip;
解説
上記のサンプルでは、Shift+Tabでポップアップメニューが表示され、上下キーで移動、EnterでJTextPaneのカーソルの後に選択された文字列が入力されます。
コンボボックスのポップアップ部分のUIを表現するBasicComboPopupを利用することで、スクロールバーをもつポップアップメニューを実現しています。
フォースを取得して、キー入力で選択を変更できるように、BasicComboPopup#isFocusTraversable BasicComboPopup#isFocusableメソッドをオーバーライドしています。また、BasicComboPopup#showしたあと、BasicComboPopup#requestFocusInWindowする必要があります。
JFrameから、ポップアップメニューがはみ出す(親WindowがHeavyWeightWindowになる)場合、カーソルキーなどで、アイテムが移動選択できないバグがあったので、SwingUtilities.getWindowAncestor(popup).toFront();を追加するなどの修正をしました。
private void popupMenu(ActionEvent e) {
Rectangle rect = getMyPopupRect();
popup.show(jtp, rect.x, rect.y + rect.height);
EventQueue.invokeLater(new Runnable() {
public void run() {
SwingUtilities.getWindowAncestor(popup).toFront();
popup.requestFocusInWindow();
}
});
}
#screenshot(,screenshot2.png)