• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JComboBoxのドロップダウンリスト幅を指定値以上に保つ
#navi(../)
*JComboBoxのポップアップ幅を指定値以上に保つ [#i9a11225]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2007-09-10~
更新日:&lastmod;

#contents

**概要 [#o85c65e3]
JComboBoxのドロップダウンリストが表示されたとき、本体の幅が狭くても一定の幅以下にはならないように設定します。

#screenshot

**サンプルコード [#v4b8bfc8]
#code{{
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;

**解説 [#cc7f021e]
上記のサンプルでは、下二つのJComboBoxにPopupMenuListenerを実装したリスナーを設定しています。このリスナーでは、ポッアプメニュー(ドロップダウンリスト)が開かれる前にJComboBox本体の幅を指定値と比較し、小さかった場合は以下のような通常とは異なる手順でポッアプメニューの表示を行っています。
- JComboBoxのサイズを取得し保存
- JComboBoxの幅を指定値まで拡大
- JCOmboBox#showPopupでポッアプメニューを表示
- JComboBox#showPopupでポッアプメニューを表示
-- ポッアプメニューの幅も、指定値まで拡大している
- JComboBox本体のサイズを保存していた元の値に戻す

**参考リンク [#a112d945]
-[[How to widen the drop-down list in a JComboBox>http://forum.java.sun.com/thread.jspa?threadID=570675]]
-[[Make JComboBox popup wide enough - Santhosh Kumar's Weblog>http://www.jroller.com/santhosh/entry/make_jcombobox_popup_wide_enough]]
--こちらには、JComboBox#doLayout()と、JComboBox#getSize()をオーバーライドして、十分な幅のドロップダウンリストを表示するサンプルがあります。

**コメント [#p6e4cf7f]
#comment