Swing/TwoColumnsMenu のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TwoColumnsMenu へ行く。
- 1 (2021-08-09 (月) 13:57:16)
- 2 (2021-08-09 (月) 14:58:48)
- 3 (2021-08-10 (火) 10:44:28)
- 4 (2023-08-27 (日) 21:39:28)
- 5 (2023-09-15 (金) 12:49:02)
- category: swing folder: TwoColumnsMenu title: JMenuから開くポップアップウィンドウのレイアウトを2列に変更する tags: [JMenu, JMenuBar, JPopupMenu, GridLayout] author: aterai pubdate: 2021-08-09T13:56:12+09:00 description: JMenuをクリックして開くポップアップウィンドウのレイアウトをGridLayoutを変更してJMenuItemなどを2列で表示します。 image: https://drive.google.com/uc?id=1WUozvYw68yZx1vvlEWPNmIrTO_-0wA6A
概要
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("Widows");
menu2.add("Widows 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