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

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

編集者:Terai Atsuhiro~

作成日:2007-09-10
更新日:2021-11-14 (日) 03:50:25
  • category: swing folder: ComboPopupWidth title: JComboBoxのドロップダウンリスト幅を指定値以上に保つ tags: [JComboBox, PopupMenuListener] author: aterai pubdate: 2007-09-10T08:19:10+09:00 description: JComboBoxのドロップダウンリストが表示されたとき、本体の幅が狭くても一定の幅以下にはならないように設定します。 image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTJ8wQD77I/AAAAAAAAAVM/Ade6cu49JUQ/s800/ComboPopupWidth.png

概要

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

概要

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

サンプルコード

#spanend
#spanadd
class WidePopupMenuListener implements PopupMenuListener {
#spanend
  private static final int POPUP_MIN_WIDTH = 300;
  private boolean adjusting;

#spandel
#screenshot
#spanend
#spandel

#spanend
#spandel
**サンプルコード [#v4b8bfc8]
#spanend
#spandel
#code{{
#spanend
#spandel
class MinWidthPopupMenuListener implements PopupMenuListener{
#spanend
  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) {
  @Override 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) {}
#spanadd

#spanend
  @Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
    /* not needed */
  }
#spanadd

#spanend
  @Override public void popupMenuCanceled(PopupMenuEvent e) {
    /* not needed */
  }
}
View in GitHub: Java, Kotlin
  • &jnlp;
  • &jar;
  • &zip;

解説

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

解説

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

参考リンク

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

コメント

参考リンク

コメント