JPopupMenuの最小幅を設定する
Total: 3886, Today: 1, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
JPopupMenuに下限となる最小幅を固定値で設定します。
Screenshot

Advertisement
Source Code Examples
menu = new JMenu("BoxHStrut");
menu.add(Box.createHorizontalStrut(200));
View in GitHub: Java, KotlinDescription
DefaultJMenuに配置されたコンポーネントの最も大きな推奨サイズの幅からJPopupMenuの幅が決まる
BoxHStrutBox.createHorizontalStrut(...)で高さ0で任意の幅(このサンプルでは200)のコンポーネントを作成してJMenuに配置- この
Boxの幅がJPopupMenuの最小幅になる - この
BoxはMenuElementインタフェースに適合しないのでJMenu#getSubElements()の戻り値には含まれない
OverrideJMenuに配置するJMenuItemのgetPreferredSize()メソッドをオーバーライドして任意の幅を返すように設定- この
JMenuItemの幅がJPopupMenuの最小幅になる
LayoutJMenuが使用するJPopupMenuのレイアウトを変更DefaultMenuLayout#preferredLayoutSize(...)メソッドをオーバーライドして任意の幅を返すように設定popup.setLayout(new DefaultMenuLayout(popup, BoxLayout.Y_AXIS) { @Override public Dimension preferredLayoutSize(Container target) { Dimension d = super.preferredLayoutSize(target); d.width = Math.max(200, d.width); return d; } });
Html- 余白などを
0にし、幅を設定した<table>タグで装飾した文字列を使用するJMenuItemを使用new JMenuItem("<html><table cellpadding='0' cellspacing='0' style='width:200'>...")
- 文字列自体の幅が
<table>で指定した幅になるのでAcceleratorなどが存在するとその幅も追加される htmlタグを使用するのでMnemonicが表示できない
- 余白などを