有了这个秋千应用程序:
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 之后添加时)它也有效。有时第一个案例不起作用。这很奇怪,但目前我不知道它是什么原因造成的
我们可以看看你的 MyFrame 类吗?您实际上是如何/在哪里启动的?