В NetBeans, как добавить jMenuBar в JPanel? - PullRequest
6 голосов
/ 18 февраля 2012

У меня проблемы, и я не очень понимаю, почему.У меня есть JFrame и JPanel, и все работает правильно.Я пытаюсь добавить jMenuBar в JPanel и не могу его отобразить.Он находится в разделе «Другие компоненты» и не отображается во время выполнения.какие-либо предложения?

edit: кажется, что соответствующий ответ - NetBeans не может добавить JMenu в JFrameЯ хотел добавить это к первому сообщению, потому что соответствующий ответ ниже был отклонен.

Ответы [ 4 ]

8 голосов
/ 18 февраля 2012

JMenuBar добавляется в JFrame с помощью метода setJMenuBar (...) .

Небольшой код, чтобы помочь вашему делу:

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();
            }
        });
    }
}
6 голосов
/ 19 февраля 2012

Одним из умных способов является двойной щелчок на JFrame, который находится на панели проекта. Появляется новое окно с реальным JFrame на левой панели палитры. Появляется все компоненты свинга, которые нужно только перетащить в этот элементКод будет автоматически создан. Вы также можете добавить событие к этому элементу, щелкнув по нему правой кнопкой мыши

5 голосов
/ 18 февраля 2012

Для 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();
         }
      });
   }
}

Мало того, что это легко сделать, во многих случаях это желательно.

4 голосов
/ 18 февраля 2012

Поскольку JMenuBar наследуется от JComponent, его можно добавить в любой контейнер (обычно тот, который использует BorderLayout в позицию BorderLayout.PAGE_START), чаще всего добавляется в JApplet, JDialog, JFrame, JInternalFrame, JRootPane с помощью метода setJMenuBar (...) .

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

Просто небольшое дополнение:

Строка меню содержит одно или несколько меню и имеет обычное, зависящее от платформы расположение - обычно вдоль верхней части окна.

...