Swing/ComboPopupWidth のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ComboPopupWidth へ行く。
- 1 (2007-10-07 (日) 17:21:14)
- 2 (2008-03-14 (金) 17:37:27)
- 3 (2008-03-21 (金) 19:19:37)
- 4 (2011-06-05 (日) 02:34:16)
- 5 (2013-01-31 (木) 22:59:33)
- 6 (2013-08-01 (木) 14:05:32)
- 7 (2013-09-08 (日) 02:35:09)
- 8 (2014-06-03 (火) 19:03:51)
- 9 (2014-10-28 (火) 03:15:51)
- 10 (2014-10-31 (金) 01:52:03)
- 11 (2014-11-01 (土) 00:46:09)
- 12 (2014-11-25 (火) 03:03:31)
- 13 (2015-11-24 (火) 03:03:46)
- 14 (2016-05-27 (金) 13:08:33)
- 15 (2016-09-15 (木) 16:30:26)
- 16 (2017-06-14 (水) 18:17:10)
- 17 (2017-11-02 (木) 15:34:40)
- 18 (2018-06-06 (水) 20:34:19)
- 19 (2020-05-27 (水) 02:45:35)
- 20 (2021-11-14 (日) 03:50:25)
- 21 (2022-08-20 (土) 22:15:25)
TITLE:JComboBoxのドロップダウンリスト幅を指定値以上に保つ
JComboBoxのポップアップ幅を指定値以上に保つ
編集者:Terai Atsuhiro
作成日:2007-09-10
更新日:2021-11-14 (日) 03:50:25
概要
JComboBoxのドロップダウンリストが表示されたとき、本体の幅が狭くても一定の幅以下にはならないように設定します。
#screenshot
サンプルコード
class MinWidthPopupMenuListener implements PopupMenuListener{
private static final int POPUP_MIN_WIDTH = 320;
private boolean adjusting = false;
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
JComboBox combo = (JComboBox)e.getSource();
Dimension size = combo.getSize();
if(size.width>=POPUP_MIN_WIDTH) return;
if(!adjusting) {
adjusting = true;
combo.setSize(POPUP_MIN_WIDTH, size.height);
combo.showPopup();
}
combo.setSize(size);
adjusting = false;
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
public void popupMenuCanceled(PopupMenuEvent e) {}
}
- &jnlp;
- &jar;
- &zip;
解説
上記のサンプルでは、下二つのJComboBoxにPopupMenuListenerを実装したリスナーを設定しています。このリスナーでは、ポッアプメニュー(ドロップダウンリスト)が開かれる前にJComboBox本体の幅を指定値と比較し、小さかった場合は以下のような通常とは異なる手順でポッアプメニューの表示を行っています。
- JComboBoxのサイズを取得し保存
- JComboBoxの幅を指定値まで拡大
- JCOmboBox#showPopupでポッアプメニューを表示
- ポッアプメニューの幅も、指定値まで拡大している
- JComboBox本体のサイズを保存していた元の値に戻す
参考リンク
- How to widen the drop-down list in a JComboBox
- Make JComboBox popup wide enough - Santhosh Kumar's Weblog
- こちらには、JComboBox#doLayout()と、JComboBox#getSize()をオーバーライドして、十分な幅のドロップダウンリストを表示するサンプルがあります。