JComboBoxのドロップダウンリスト幅を指定値以上に保つ
Total: 16577
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JComboBox
のドロップダウンリストが表示されたとき、本体の幅が狭くても一定の幅以下にはならないように設定します。
Screenshot
Advertisement
サンプルコード
class WidePopupMenuListener implements PopupMenuListener {
private static final int POPUP_MIN_WIDTH = 300;
private boolean 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;
}
@Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
/* not needed */
}
@Override public void popupMenuCanceled(PopupMenuEvent e) {
/* not needed */
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、下2
つのJComboBox
にPopupMenuListener
を実装したリスナーを設定しています。このリスナーでは、ポップアップメニューが開かれる前に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()
をオーバーライドして、十分な幅のドロップダウンリストを表示するサンプルがある