将JMenuBar添加到JPanel?

时间:2010-11-28 23:51:04

标签: java swing jpanel jmenubar

我有一个JMenuBar和一个JPanel。我想将JMenuBar添加到JPanel。我该怎么做?

5 个答案:

答案 0 :(得分:15)

您可以使用BorderLayout作为JPanel,并使用

将JMenuBar放入面板的NORTH区域
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(menubar, BorderLayout.NORTH);

JMenuBar是一个JComponent,可以像任何其他JComponent一样添加到Container中。

答案 1 :(得分:4)

使用setJMenuBar方法将JMenuBars设置为JFrame。

请参阅以下教程,了解如何使用它们。

http://download.oracle.com/javase/tutorial/uiswing/components/menu.html

答案 2 :(得分:0)

我也尝过了,但JMenuItem Jmenu并且JmenuBar未添加到JPanel。 但是,如果您将JFrame的布局声明为null,然后在setBounds(x, y, width, height)实例上使用JMenuBar,然后将菜单栏添加到JFrame,您就会感觉到。

答案 3 :(得分:0)

尝试在面板上放置一个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);

答案 4 :(得分:0)

我有另一个解决方案,虽然您必须在"其他组件"中添加JMenuBar。在NetBeans中(足够好)。创建一个JPanel,然后添加另一个JPanel(称为子),填充整个outter 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,然后将子项放入根窗格的内容窗格中。