【发布时间】:2011-05-17 00:53:42
【问题描述】:
我有一个 JMenuBar 和一个 JPanel。我想将 JMenuBar 添加到 JPanel。我该怎么做?
【问题讨论】:
标签: java swing jpanel jmenubar
我有一个 JMenuBar 和一个 JPanel。我想将 JMenuBar 添加到 JPanel。我该怎么做?
【问题讨论】:
标签: java swing jpanel jmenubar
您可以为您的 JPanel 使用 BorderLayout 并将 JMenuBar 放入面板的 NORTH 区域
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(menubar, BorderLayout.NORTH);
JMenuBar 是一个 JComponent,可以像任何其他 JComponent 一样添加到容器中。
【讨论】:
JMenuBars 使用 setJMenuBar 方法设置为 JFrame。
请参阅以下教程了解如何使用它们。
http://download.oracle.com/javase/tutorial/uiswing/components/menu.html
【讨论】:
我也尝试过,但 JMenuItem 与 Jmenu 和 JmenuBar 未添加到 JPanel。
但是,如果您将JFrame 的布局声明为空,然后在JMenuBar 实例上使用setBounds(x, y, width, height),然后将菜单栏添加到JFrame,您就会得到这种感觉。
【讨论】:
尝试在您的面板上放置一个 jDesktopPane,然后在其中添加一个菜单栏。我在下面的示例中使用了一个选项卡式窗格,但它应该同样适用于一个面板。
JDesktopPane desktopPane = new JDesktopPane();
tabbedPane.addTab("New tab", null, desktopPane, null);
JMenuBar menuBar_1 = new JMenuBar();
menuBar_1.setBounds(0, 0, 441, 21);
desktopPane.add(menuBar_1);
【讨论】:
我有另一个解决方案,尽管您必须在 NetBeans 的“其他组件”中添加 JMenuBar(足够好)。创建一个 JPanel,然后在内部添加另一个 JPanel(称为子),填充整个外部 JPanel。将您的控件放在子面板中。然后添加 JMenuBar,但 NetBeans 会将其放在“其他组件”中。编辑您的源代码并在调用“initComponents”后在 ctor 中调用此函数:
public static void setJPanelMenuBar(JPanel parent, JPanel child, JMenuBar menuBar) {
parent.removeAll();
parent.setLayout(new BorderLayout());
JRootPane root = new JRootPane();
parent.add(root, BorderLayout.CENTER);
root.setJMenuBar(menuBar);
root.getContentPane().add(child);
parent.putClientProperty("root", root); //if you need later
}
例如,您的 ctor 可能如下所示:
public MyPanel() {
initComponents();
setJPanelMenuBar(this, child, myMenuBar);
}
为我工作。通过查看 JInternalFrame 源代码得到了这个想法。它所做的只是用 JRootPane() 替换子 JPanel,然后将子 JPanel 放入根窗格的内容窗格中。
【讨论】: