JMenuから開くポップアップウィンドウのレイアウトを2列に変更する
Total: 1282
, Today: 1
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
JMenu
をクリックして開くポップアップウィンドウのレイアウトをGridLayout
に変更してJMenuItem
などを2
列で表示します。
Screenshot
Advertisement
サンプルコード
JMenu menu2 = new JMenu("LookAndFeel");
// = LookAndFeelUtil.createLookAndFeelMenu();
menu2.getPopupMenu().setLayout(new GridLayout(0, 2, 2, 0));
menu2.add("Metel");
menu2.add("Nimbus");
menu2.add("CDE/Motif");
menu2.add("Windows");
menu2.add("Windows Classic");
View in GitHub: Java, Kotlin解説
JMenu#getPopupMenu()
メソッドでポップアップウィンドウ(JPopupMenu
)を取得JPopupMenu#setLayout(new GridLayout(0, 2, 2, 0));
でレイアウトをデフォルトのBoxLayout
から2
列のGridLayout
に変更し、JMenuItem
やJRadioButtonMenuItem
などの表示を2
列に変更JSeparator
を追加しても段抜きにはならないので、その場合はGridBagLayout
などを使用する必要がある2
段(2
列)決め打ちで段落罫線をJSeparator
で描画する場合は、以下のようなBorder
を使用する方法もあるclass ColumnRulesBorder implements Border { private final Insets insets = new Insets(0, 0, 0, 0); private final JSeparator separator = new JSeparator(SwingConstants.VERTICAL); @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height) { if (c instanceof JComponent) { JComponent p = (JComponent) c; Rectangle r = SwingUtilities.calculateInnerArea(p, null); int sw = separator.getPreferredSize().width; int sh = r.height; int sx = (int) (r.getCenterX() - sw / 2d); int sy = (int) r.getMinY(); Graphics2D g2 = (Graphics2D) g.create(); SwingUtilities.paintComponent(g2, separator, p, sx, sy, sw, sh); g2.dispose(); } } @Override public Insets getBorderInsets(Component c) { return insets; } @Override public boolean isBorderOpaque() { return true; } }
参考リンク
- JPopupMenuをボタンの長押しで表示
- JPopupMenuのレイアウトを変更して上部にメニューボタンを追加する
- Java swing: how to align menu items in rows and columns? - Stack Overflow