Java JMenuBar 分布在 window 的整个宽度上

Java JMenuBar is spread over the whole width of the window

我想使用以下代码创建一个非常简单的 JMenuBar,其中包含 2 个可点击的 JMenuItem:

JFrame window = new JFrame();
JMenuBar bar = new JMenuBar();
JMenuItem open = new JMenuItem("Open"), reload = new JMenuItem("Reload");
bar.add(open);
bar.add(reload);
window.setJMenuBar(bar);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.pack();
window.setVisible(true);

然而,这两个项目之间有一个巨大的 space,我不知道这是从哪里来的:

我希望“重新加载”项紧挨着“打开”项。
这是运行的代码的第一部分(紧接着有一个断点),所以没有其他东西可以干扰它。
有什么东西 'obvious' 我想念的吗?

您可能对 JMenuJMenuItem 感到困惑。我建议你检查一下this tutorial of the docs,这将有助于理解各种对象之间的差异。

要按照我的理解做您想做的事情,您应该使用类似的东西:


    JFrame window = new JFrame();
    JMenuBar bar = new JMenuBar();
    JMenu open = new JMenu("Open"), reload = new JMenu("Reload");
    
    bar.add(open);
    bar.add(reload);
    ...

如果我崩溃了,而你打算用两个 JMenuItems 创建一个 JMenu,你可以轻松地执行以下操作:


    JFrame window = new JFrame();
    JMenuBar bar = new JMenuBar();
    JMenu menu = new JMenu("A menu");    // creating a menu to hold the two items
    JMenuItem open = new JMenuItem("Open"), reload = new JMenuItem("Reload");
    
    menu.add(open);
    menu.add(reload);
    ...

The point is that I don't want to create Menus,

好吧,菜单的设计目的是单击它,然后显示带有菜单项的弹出窗口。

如果您想要直接点击按钮的功能,请使用 JToolBar。阅读有关 How to use Toolbars 的 Swing 教程部分,了解更多信息和工作示例。