2

创建菜单栏及其项目时我没有问题。但是现在,当我得到一个问题如何使菜单项显示为列和行的表格形状时,我真的不知道。

目标是使用 java 创建这种菜单项。 检查此链接。

而现在,我只是认为我应该使用 jpanel 作为菜单项,然后应用 flowlayout,然后在网格中添加许多 jlabel(s) 作为菜单项。但这不是最糟糕的吗?在上述链接上创建菜单项(例如图像预览)的最佳交易是什么?

我尝试了谷歌,但没有找到相关案例。CMIIW。

4

3 回答 3

6

实例的弹出菜单JMenu是一个标准容器,因此您可以添加任何您想要的内容。它具有默认布局,但您可以更改它。

您的模型中的内容是由以下代码创建的:

import javax.swing.*;
import java.awt.*;

public class Test {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame("Menu test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(new Dimension(600, 400));
                JMenuBar menuBar = new JMenuBar();
                JMenu menu = new JMenu("Test");
                JPopupMenu popupMenu = menu.getPopupMenu();
                popupMenu.setLayout(new GridLayout(5, 5));
                for (int r = 0; r < 5; r++) {
                    for (int c = 0; c < 5; c++) {
                        popupMenu.add(new JMenuItem("(" + (r + 1) + ", " + (c + 1) + ")"));
                    }
                }

                menuBar.add(menu);
                frame.setJMenuBar(menuBar);

                frame.setVisible(true);
            }
        });
    }

}
于 2011-10-27T09:38:04.483 回答
2

我还没有看到这样的现成组件。所以我认为你是一个人。

我看到两种可能性:

  1. JMenuItem 是一个 JComponent,因此您可以向其中添加其他组件。您可能想要使用某种基于网格的布局并为数字添加按钮或标签。

  2. 实现你自己的 JMenuItem 来显示你的网格组件而不是普通的 JPopupMenu

无论如何,请查看 JMenu(Item) 的源代码,以了解这些组件是如何工作的。

于 2011-10-27T09:30:46.723 回答
1

最简单的解决方案是设置 JMenu 的 JPopupMenu 的布局,然后像往常一样添加项目。无需创建子类。

例子:

import javax.swing.*;
import java.awt.*;

public class menu {
    public static void main(String ... args) {
        SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    JMenuBar menuBar = new JMenuBar();

                    JMenu menu = new JMenu("A regular menu");
                    menu.add(new JMenuItem("Menu item"));

                    JMenu gridMenu = new JMenu("Menu with grid");
                    // This does the trick:
                    gridMenu.getPopupMenu().setLayout(new GridLayout(2, 2));
                    gridMenu.add("Top left");
                    gridMenu.add("Top right");
                    gridMenu.add("Bottom left");
                    gridMenu.add("Bottom right");
                    menu.add(gridMenu);

                    menuBar.add(menu);

                    JFrame frame = new JFrame("Menus");
                    frame.setJMenuBar(menuBar);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.pack();
                    frame.setVisible(true);
                }
            });
    }
}
于 2011-10-27T10:00:37.607 回答