Swing/TwoColumnsMenu のバックアップの現在との差分(No.2)
- 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列で表示します。 description: JMenuをクリックして開くポップアップウィンドウのレイアウトにGridLayoutを変更してJMenuItemなどを2列で表示します。 image: https://drive.google.com/uc?id=1WUozvYw68yZx1vvlEWPNmIrTO_-0wA6A
概要
JMenu
をクリックして開くポップアップウィンドウのレイアウトをGridLayout
を変更してJMenuItem
などを2
列で表示します。
JMenu
をクリックして開くポップアップウィンドウのレイアウトをGridLayout
に変更してJMenuItem
などを2
列で表示します。
Screenshot
Advertisement
サンプルコード
#spandel
JMenu menu2 = new JMenu("LookAndFeel"); // LookAndFeelUtil.createLookAndFeelMenu();
#spanend
#spanadd
JMenu menu2 = new JMenu("LookAndFeel");
#spanend
#spanadd
// = LookAndFeelUtil.createLookAndFeelMenu();
#spanend
menu2.getPopupMenu().setLayout(new GridLayout(0, 2, 2, 0));
menu2.add("Metel");
menu2.add("Nimbus");
menu2.add("CDE/Motif");
#spandel
menu2.add("Widows");
#spanend
#spandel
menu2.add("Widows Classic");
#spanend
#spanadd
menu2.add("Windows");
#spanend
#spanadd
menu2.add("Windows Classic");
#spanend
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
を使用する方法もある#spanend #spanadd class ColumnRulesBorder implements Border { #spanend 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(); } } #spanadd #spanend @Override public Insets getBorderInsets(Component c) { return insets; } #spanadd #spanend @Override public boolean isBorderOpaque() { return true; } #spanadd } #spanend #spanadd
参考リンク
- JPopupMenuをボタンの長押しで表示
- JPopupMenuのレイアウトを変更して上部にメニューボタンを追加する
- Java swing: how to align menu items in rows and columns? - Stack Overflow