JMenu添加到JMenuBar后还可以添加JMenuItem吗?

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

有了这个秋千应用程序:

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

public class App {
    public static void main(String[] args) {
        MyFrame frame = new MyFrame();
        frame.setLayout(new FlowLayout());

        JMenuBar menuBar = new JMenuBar();

        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");

        // JMenu added to JMenuBar BEFORE JMenuItem
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);

        JMenuItem loadItem = new JMenuItem("Load");
        JMenuItem saveItem = new JMenuItem("Save");
        JMenuItem exitItem = new JMenuItem("Exit");

        fileMenu.add(loadItem);
        fileMenu.add(saveItem);
        fileMenu.add(exitItem);


        frame.setJMenuBar(menuBar);
    }
}

正确显示菜单栏,顺序是JMenuBar > 添加JMenu > 添加JMenuItem。但这个修改不起作用:

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

public class App {
    public static void main(String[] args) {
        MyFrame frame = new MyFrame();
        frame.setLayout(new FlowLayout());

        JMenuBar menuBar = new JMenuBar();

        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");

        JMenuItem loadItem = new JMenuItem("Load");
        JMenuItem saveItem = new JMenuItem("Save");
        JMenuItem exitItem = new JMenuItem("Exit");

        fileMenu.add(loadItem);
        fileMenu.add(saveItem);
        fileMenu.add(exitItem);

        // JMenu added to JMenuBar AFTER JMenuItem
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);

        frame.setJMenuBar(menuBar);
    }
}

其中顺序是 JMenuBar > 添加 JMenuItem > 添加 JMenu。当然,将JMenuItem添加到

new
ed JMenu只是JMenu添加到JMenuBar之前的准备工作。但它仍然不起作用。为什么?添加彼此的顺序重要吗?

PS:问这个问题是因为在多次构建应用程序后,它有时会显示菜单栏,而有时则根本不显示菜单栏(即空白框)。我首先认为这与添加对象的顺序有关,但即使在其他情况下(当 JMenu 在 JMenuItem 之后添加时)它也有效。有时第一个案例不起作用。这很奇怪,但目前我不知道它是什么原因造成的

java swing menu
1个回答
0
投票

我们可以看看你的 MyFrame 类吗?您实际上是如何/在哪里启动的?

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