У меня есть JMenuBar и JPanel. Я хотел бы добавить JMenuBar в JPanel. Как мне это сделать?
Добавить JMenuBar в JPanel?
Ответ 1
Вы можете использовать BorderLayout для своего JPanel и поместить JMenuBar в область NORTH панели с помощью
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(menubar, BorderLayout.NORTH);
JMenuBar является JComponent и может быть добавлен в Контейнер, как и любой другой JComponent.
Ответ 2
JMenuBars установлены в JFrame с помощью метода setJMenuBar.
Обратитесь к следующему руководству о том, как их использовать.
http://download.oracle.com/javase/tutorial/uiswing/components/menu.html
Ответ 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(), а затем поместить ее в область содержимого панели.