JPopupMenuの最小幅を設定する
Total: 3231
, Today: 2
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
JPopupMenu
に下限となる最小幅を固定値で設定します。
Screenshot
Advertisement
サンプルコード
menu = new JMenu("BoxHStrut");
menu.add(Box.createHorizontalStrut(200));
View in GitHub: Java, Kotlin解説
Default
JMenu
に配置されたコンポーネントの最も大きな推奨サイズの幅からJPopupMenu
の幅が決まる
BoxHStrut
Box.createHorizontalStrut(...)
で高さ0
で任意の幅(このサンプルでは200
)のコンポーネントを作成してJMenu
に配置- この
Box
の幅がJPopupMenu
の最小幅になる - この
Box
はMenuElement
インタフェースに適合しないのでJMenu#getSubElements()
の戻り値には含まれない
Override
JMenu
に配置するJMenuItem
のgetPreferredSize()
メソッドをオーバーライドして任意の幅を返すように設定- この
JMenuItem
の幅がJPopupMenu
の最小幅になる
Layout
JMenu
が使用する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
が表示できない
- 余白などを