2010-11-28 4 views

ответ

13

Вы можете использовать BorderLayout для ваших JPanel и поставить JMenuBar в область СЕВЕРО панели с

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

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

+3

Я думал, что вы можете добавлять только JMenuBar's в JFrame's – Enrique

+0

Works, не позволяйте мне добавлять его в самую верхнюю часть но достаточно близко! – Skizit

+0

BorderLayout.PAGE_START, казалось, поставил его на первое место. –

4

JMenuBars установлены в JFrame с использованием метода setJMenuBar.

См. Следующий учебник о том, как их использовать.

http://download.oracle.com/javase/tutorial/uiswing/components/menu.html

+0

Невозможно добавить их прямо в JPanel? У меня есть другие предметы там ... если я добавлю JFrame, не нарисуйте мои элементы панели? – Skizit

+2

Ну, JMenuBar - это еще один JComponent, поэтому вы можете добавить его в свой JPanel так же, как и вы. Однако, поскольку он предназначен для подключения к JFrame, он может работать некорректно (или даже вообще!) – Codemwnci

0

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

+0

-1 для предложения нулевого макета – kleopatra

0

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

hmm ... почему JDesktopPane? – kleopatra

+0

Я создаю приложение, где я хочу иметь меню на каждой съемной вкладке, чтобы отображать несколько просмотров World Wind. Это казалось хорошим способом сделать это. Не удалось найти другой способ иметь отдельную строку меню для каждого окна. – user2248926

0

У меня есть другое решение, хотя вы должны добавить 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 
    } 

Например, ваш может выглядеть т е р так:

public MyPanel() { 
    initComponents(); 
    setJPanelMenuBar(this, child, myMenuBar); 
    } 

Работы для меня. Получил идею, посмотрев исходный код JInternalFrame. Все, что он делает, это заменить дочернюю JPanel на JRootPane(), а затем поместить ее в область содержимого корневой панели.

Смежные вопросы