一个 JMenuBar 和多个 JPanel
One JMenuBar and multiple JPanels
我的应用程序 GUI 有问题。我想创建一个全局 JMenuBar 并将其共享给其他 JPanel,但是如果我想分配给多个 JPanel,我会遇到错误:
#
"menuBar组件被多次添加到父组件。
•panelAll.add(菜单栏);
•panelTask.add(菜单栏);
#
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
JPanel panelAll = new JPanel();
frame.getContentPane().add(panelAll, "name_218556506364138");
panelAll.setLayout(null);
JMenuBar menuBar = new JMenuBar();
menuBar.setBounds(0, 0, 795, 21);
panelAll.add(menuBar);
JPanel panelTask = new JPanel();
frame.getContentPane().add(panelTask, "name_218567310779840");
panelTask.setLayout(null);
panelTask.add(menuBar);
JPanel panelMyTask = new JPanel();
frame.getContentPane().add(panelMyTask, "name_218578712986622");
panelMyTask.add(menuBar);
JPanel panelMySoftware = new JPanel();
frame.getContentPane().add(panelMySoftware, "name_218590026900741");
panelMySoftware.add(menuBar);
JPanel panelMyDevices = new JPanel();
frame.getContentPane().add(panelMyDevices, "name_218598029981563");
panelMyDevices.add(menuBar);
}
}
我认为将 JMenuBar 添加到 JPanel 中不是一个好主意,但如果您坚持...
一个JMenuBar 只能添加到一个容器中,因此您需要创建更多JMenuBar 的实例。如果您使用 command pattern.
应该没有问题
//first instance
JMenuBar taskMenuBar = new MyJMenuBarImplementation();
JPanel panelMyTask = new JPanel();
frame.getContentPane().add(panelMySoftware, "name_xxx");
panelMyTask.add(taskMenuBar);
//second instance
JMenuBar softwareMenuBar = new MyJMenuBarImplementation();
JPanel panelMySoftware = new JPanel();
frame.getContentPane().add(panelMySoftware, "name_yyy");
panelMySoftware.add(softwareMenuBar);
//and so on...
我的应用程序 GUI 有问题。我想创建一个全局 JMenuBar 并将其共享给其他 JPanel,但是如果我想分配给多个 JPanel,我会遇到错误:
#
"menuBar组件被多次添加到父组件。
•panelAll.add(菜单栏);
•panelTask.add(菜单栏);
#
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
JPanel panelAll = new JPanel();
frame.getContentPane().add(panelAll, "name_218556506364138");
panelAll.setLayout(null);
JMenuBar menuBar = new JMenuBar();
menuBar.setBounds(0, 0, 795, 21);
panelAll.add(menuBar);
JPanel panelTask = new JPanel();
frame.getContentPane().add(panelTask, "name_218567310779840");
panelTask.setLayout(null);
panelTask.add(menuBar);
JPanel panelMyTask = new JPanel();
frame.getContentPane().add(panelMyTask, "name_218578712986622");
panelMyTask.add(menuBar);
JPanel panelMySoftware = new JPanel();
frame.getContentPane().add(panelMySoftware, "name_218590026900741");
panelMySoftware.add(menuBar);
JPanel panelMyDevices = new JPanel();
frame.getContentPane().add(panelMyDevices, "name_218598029981563");
panelMyDevices.add(menuBar);
}
}
我认为将 JMenuBar 添加到 JPanel 中不是一个好主意,但如果您坚持...
一个JMenuBar 只能添加到一个容器中,因此您需要创建更多JMenuBar 的实例。如果您使用 command pattern.
应该没有问题//first instance
JMenuBar taskMenuBar = new MyJMenuBarImplementation();
JPanel panelMyTask = new JPanel();
frame.getContentPane().add(panelMySoftware, "name_xxx");
panelMyTask.add(taskMenuBar);
//second instance
JMenuBar softwareMenuBar = new MyJMenuBarImplementation();
JPanel panelMySoftware = new JPanel();
frame.getContentPane().add(panelMySoftware, "name_yyy");
panelMySoftware.add(softwareMenuBar);
//and so on...