在NetBeans中,我如何将jMenuBar添加到JPanel中



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

edit:看起来合适的答案是NetBeans不能向JFrame添加JMenu。我想把这个添加到第一篇文章中,因为下面的正确答案被否决了。

JMenuBar是通过使用setJMenuBar(…)方法添加到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();
            }
        });
    }
}

其中一种聪明的方法是双击项目栏上的JFrame这将显示带有实际JFrame的新窗口在左侧的选项板栏上出现了摆动的所有组件您只需要将项目拖放到此框架代码将由nb自动生成您还可以通过右键单击

将事件添加到该项目中

对于状态为的向量空间

JMenuBar只能添加到JFrame、JDialog和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();
         }
      });
   }
}

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

由于JMenuBar派生自JComponent,它可以添加到任何容器(通常是使用BorderLayout到BorderLayout.PAGE_START位置的容器),因此最常见的是通过setJMenuBar(…)方法添加到JApplet、JDialog、JFrame、JIinternalFrame、JRootPane。

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

只是一个小补充:

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

相关内容

  • 没有找到相关文章