就像标题所示,我想在多个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);
}
}
这可能会被禁止吗?
答案 0 :(得分:4)
这是不可能的,至少不是你想要的方式。
组件可能只属于单个父容器,这意味着当您尝试将其应用于第二个容器时,它将有效地将其从前一个容器中删除。
而不是尝试维护单个实例,而是考虑使用“构建器”或“工厂”模式,为您生成JMenuBar
的新实例。
为了让生活更轻松,我建议您查看How to Use Actions