TITLE:JComboBoxのドロップダウンリスト幅を指定値以上に保つ

Posted by aterai at 2007-09-10

JComboBoxのポップアップ幅を指定値以上に保つ

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

  • &jnlp;
  • &jar;
  • &zip;
ComboPopupWidth.png

サンプルコード

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) {}
}

解説

上記のサンプルでは、下二つのJComboBoxにPopupMenuListenerを実装したリスナーを設定しています。このリスナーでは、ポッアプメニュー(ドロップダウンリスト)が開かれる前にJComboBox本体の幅を指定値と比較し、小さかった場合は以下のような通常とは異なる手順でポッアプメニューの表示を行っています。

  • JComboBoxのサイズを取得し保存
  • JComboBoxの幅を指定値まで拡大
  • JComboBox#showPopupでポッアプメニューを表示
    • ポッアプメニューの幅も、指定値まで拡大している
  • JComboBox本体のサイズを保存していた元の値に戻す

参考リンク

コメント