Swing/ComboPopupWidth のバックアップの現在との差分(No.1)
TITLE:JComboBoxのドロップダウンリスト幅を指定値以上に保つ
JComboBoxのポップアップ幅を指定値以上に保つ
編集者:Terai Atsuhiro~
作成日:2007-09-10
更新日:2021-11-14 (日) 03:50:25
概要
JComboBox
のドロップダウンリストが表示されたとき、本体の幅が狭くても一定の幅以下にはならないように設定します。
Screenshot
Advertisement
概要
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
つのJComboBox
にPopupMenuListener
を実装したリスナーを設定しています。このリスナーでは、ポップアップメニューが開かれる前にJComboBox
本体の幅を指定値と比較し、小さかった場合は以下のような通常とは異なる手順で表示を行っています。
参考リンク
- How to widen the drop-down list in a JComboBox
-
JComboBox
のサイズを取得し保存 -
JComboBox
の幅を指定値まで拡大 -
JComboBox#showPopup
でポップアップメニューを表示- ポップアップメニューの幅も、指定値まで拡大している
-
JComboBox
本体のサイズを保存していた元の値に戻す
コメント
参考リンク
- Swing - How to widen the drop-down list in a JComboBox
- dlindermさんの投稿(2007/06/08 23:24)に、
PopupMenuListener
を使用するサンプルがある
- dlindermさんの投稿(2007/06/08 23:24)に、
- Make JComboBox popup wide enough - Santhosh Kumar's Weblog
-
JComboBox#doLayout()
と、JComboBox#getSize()
をオーバーライドして、十分な幅のドロップダウンリストを表示するサンプルがある
-