正如标题所示,我希望在多个 JFrame 中使用一个 JMenuBar。然而这似乎不起作用。每当将 JMenuBar 实例添加到第二个 JFrame 时,都会使菜单从第一个 JFrame 中消失。
查看我的SSCCE :
public class MenuTest extends JPanel {
private static final long serialVersionUID = -9209142740183347797L;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
System.out.println("Created GUI on EDT? "+ SwingUtilities.isEventDispatchThread());
JMenuBar bar = new JMenuBar();
bar.add(new JMenu("Test1"));
bar.add(new JMenu("Test2"));
bar.add(new JMenu("Test3"));
JFrame f = new JFrame("Swing Paint Demo 1");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MenuTest());
f.setJMenuBar(bar);
f.pack();
f.setVisible(true);
JFrame f2 = new JFrame("Swing Paint Demo 2");
f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f2.add(new MenuTest());
f2.setJMenuBar(bar);
f2.pack();
f2.setVisible(true);
}
}
这可能吗?还是被禁止?
最佳答案
这是不可能的,至少不是你想要的方式。
一个组件可能只属于一个父容器,这意味着当您尝试将其应用到第二个容器时,它将有效地将其从前一个容器中删除。
不要尝试维护单个实例,而是考虑使用“构建器”或“工厂”模式来为您生成 JMenuBar
的新实例。
这也让生活更轻松,我建议看看How to Use Actions
关于java - 让 JFrame 具有相同的 JMenuBar 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25132966/