Подтвердить что ты не робот

Добавить JMenuBar в JPanel?

У меня есть JMenuBar и JPanel. Я хотел бы добавить JMenuBar в JPanel. Как мне это сделать?

4b9b3361

Ответ 1

Вы можете использовать BorderLayout для своего JPanel и поместить JMenuBar в область NORTH панели с помощью

JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(menubar, BorderLayout.NORTH);

JMenuBar является JComponent и может быть добавлен в Контейнер, как и любой другой JComponent.

Ответ 3

Я тоже пытался, но JMenuItem с Jmenu и JmenuBar не был добавлен в JPanel. Но вы можете почувствовать это, если объявите JFrame layout как null, затем используйте setBounds(x, y, width, height) on JmenuBar экземпляр, затем добавьте строку меню в JFrame.

Ответ 4

Попробуйте положить 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);

Ответ 5

У меня есть другое решение, хотя вам нужно добавить JMenuBar в "Другие компоненты" в NetBeans (достаточно хорошо). Создайте JPanel, а затем добавьте еще один JPanel внутри (назовите его дочерним), который заполняет весь внешний JPA. Поместите свои элементы управления на дочернюю панель. Затем добавьте JMenuBar, но NetBeans поместит его в "Другие компоненты". Отредактируйте свой источник и в ctor после вызова "initComponents", чтобы вызвать вызов этой функции:

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. Все, что он делает, это заменить дочернюю JPanel на JRootPane(), а затем поместить ее в область содержимого панели.