为什么 JMenuBar 隐藏在顶部窗口边框后面?

问题描述 投票:0回答:1

The Problem

我的代码

面板类:

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

public class MainFramePanel extends JPanel {
    public static final int WIDTH = 1700, HEIGHT = 900;

    private final JMenuBar menuBar = new JMenuBar();
    private final JMenu fileMenu = makeFileMenu();

    private MainFramePanel() {
        this.setPreferredSize(new Dimension(WIDTH, HEIGHT));
        this.setLayout(new BorderLayout());
        menuBar.add(fileMenu);
        this.add(menuBar, BorderLayout.NORTH);
    }

    private JMenu makeFileMenu() {
        JMenu menu = new JMenu();
        JMenuItem newFile = new JMenuItem("New"),
                openFile = new JMenuItem("Open"),
                saveFile = new JMenuItem("Save"),
                exportFile = new JMenuItem("Export As"),
                exit = new JMenuItem("Exit");
        menu.add(newFile); menu.add(openFile);
        menu.addSeparator();
        menu.add(saveFile); menu.add(exportFile);
        menu.addSeparator();
        menu.add(exit);
        return menu;
    }

    private static final MainFramePanel INSTANCE = new MainFramePanel();
    public static MainFramePanel getInstance() {
        return INSTANCE;
    }
}

框架类别:

import javax.swing.*;

public class MainFrame extends JFrame {

    private MainFrame() {
        super("My Program");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setContentPane(MainFramePanel.getInstance());
        this.pack();
        this.setLocationRelativeTo(null);
    }

    private static final MainFrame INSTANCE = new MainFrame();
    public static MainFrame getInstance() {
        return INSTANCE;
    }
}

我尝试设置不同的BorderLayout参数,我认为如果增加vgap,菜单栏会向下移动,但事实并非如此。我尝试通过 setBounds 而不使用布局来完成此操作,但随后菜单栏完全消失了。我尝试使用frame.setJMenuBar()但遇到了同样的问题。

java swing user-interface jmenubar
1个回答
0
投票

默认情况下,JMenuBar 的高度由

getPreferredSize
确定,它尝试根据需要 适合所有组件。由于您的 JMenu 没有名称,JMenuBar 就像 - “既然您没有任何文本,我将使自己成为最小尺寸,这样我就不会占用不必要的空间”。因此,要解决此问题,请为您的 JMenu 命名,如下所示。

private JMenu makeFileMenu() { JMenu menu = new JMenu(); menu.setName("File"); JMenuItem newFile = new JMenuItem("New"), openFile = new JMenuItem("Open"), saveFile = new JMenuItem("Save"), exportFile = new JMenuItem("Export As"), exit = new JMenuItem("Exit"); menu.add(newFile); menu.add(openFile); menu.addSeparator(); menu.add(saveFile); menu.add(exportFile); menu.addSeparator(); menu.add(exit); return menu; }
如果您感到困惑,
学习

如何使用 JMenu

© www.soinside.com 2019 - 2024. All rights reserved.