6

我遇到了问题,我真的不明白为什么。我有一个 JFrame 和一个 JPanel,一切正常。我正在尝试将 jMenuBar 添加到 JPanel 中,但无法显示。它被放置在“其他组件”下,并且在运行时不显示。有什么建议么?

编辑:似乎适当的答案是 NetBeans 无法将 JMenu 添加到 JFrame。我想将此添加到第一篇文章中,因为下面的适当答案被否决了。

4

4 回答 4

8

使用setJMenuBar(...)方法将 JMenuBar 添加到 JFrame。

帮助您的小代码:

import javax.swing.*;

public class MenuBarTest extends JFrame
{
    public MenuBarTest()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        JPanel contentPane = new JPanel();
        contentPane.setBackground(java.awt.Color.WHITE);
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("File");
        JMenuItem menuItem = new JMenuItem("Open");

        menu.add(menuItem);
        menuBar.add(menu);

        setContentPane(contentPane);
        setJMenuBar(menuBar);
        setSize(200, 200);
        setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new MenuBarTest();
            }
        });
    }
}
于 2012-02-18T18:08:23.607 回答
6

一种聪明的方法是双击项目栏上的 JFrame 这会出现新窗口,左侧调色板栏上有实际的 JFrame 出现摆动的所有组件,您只需将项目拖放到此 Frame 代码将由nb自动制作,您也可以通过右键单击该项目向该项目添加事件

于 2012-02-19T11:45:12.257 回答
5

对于 vextorspace 谁说:

JMenuBar 只能添加到 JFrames、JDialogs 和 JApplets。

此示例显示将 JMenuBar 添加到 JPanel(或任何容器)很容易:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;

import javax.swing.*;

public class MenuBarEg {
   private static void createAndShowGui() {
      final JFrame frame = new JFrame("MenuBar Exampe");

      JMenuItem barItem = new JMenuItem(new AbstractAction("Bar") {

         @Override
         public void actionPerformed(ActionEvent arg0) {
            JOptionPane.showMessageDialog(frame, "Hello from bar!");
         }
      });
      JMenu fooMenu = new JMenu("Foo");
      fooMenu.add(barItem);
      JMenuBar menuBar = new JMenuBar();
      menuBar.add(fooMenu);

      JPanel menuBarHoldingPanel = new JPanel(new BorderLayout());
      menuBarHoldingPanel.add(menuBar, BorderLayout.PAGE_START);

      JPanel mainPanel = new JPanel(new GridLayout(0, 1));

      // rigid area just as a place-holder
      mainPanel.add(Box.createRigidArea(new Dimension(400, 150)));
      mainPanel.add(menuBarHoldingPanel);

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

这不仅容易做到,而且在很多情况下都是可取的。

于 2012-02-18T18:22:15.440 回答
4

由于 JMenuBar 从 JComponent 派生,它可以添加到任何容器(通常使用 BorderLayout 到 BorderLayout.PAGE_START 位置的容器),它最常通过setJMenuBar(...)方法添加到 JApplet、JDialog、JFrame、JInternalFrame、JRootPane .

http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html

只是一个小补充:

一个菜单栏包含一个或多个菜单,并且有一个习惯的、依赖于平台的位置——通常在窗口的顶部。

于 2012-02-18T18:12:41.237 回答