2010-11-28 67 views

Respuesta

13

Puede utilizar un BorderLayout para sus JPanel y poner el JMenuBar en la zona norte del panel con

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

JMenuBar es un JComponent y puede ser agregado a un contenedor como cualquier otro JComponent.

+3

Pensé que solo puedes agregar JMenuBar a JFrame's – Enrique

+0

Works, no me permitirán agregarlo a la parte superior pero lo suficientemente cerca! – Skizit

+0

BorderLayout.PAGE_START parecía ponerlo en la parte superior para mí. –

4

JMenuBars se configuran en el JFrame utilizando el método setJMenuBar.

Consulte el siguiente tutorial sobre cómo usarlos.

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

+0

¿No es posible agregarlos directamente a un JPanel? Tengo otros artículos allí ... si agrego un JFrame ¿no dibujaré sobre los elementos de mi Panel? – Skizit

+2

Bueno, un JMenuBar es solo otro JComponent, por lo que puedes agregarlo a tu JPanel como lo harías con cualquier otra cosa. Sin embargo, como está diseñado para ser adjuntado a un JFrame, puede que no funcione correctamente (o incluso que lo haga) – Codemwnci

0

Lo intenté pero JMenuItem con Jmenu y JmenuBar no se añadió a JPanel. Pero puede obtener esa sensación si declara el diseño de JFrame como nulo, luego use setBounds(x, y, width, height) en la instancia JMenuBar y luego agregue la barra de menú a JFrame.

+0

-1 para sugerir un diseño nulo – kleopatra

0

Intente poner un jDesktopPane en su panel y luego agregue una barra de menú a eso. Estoy usando un panel con pestañas en mi ejemplo a continuación, pero debería funcionar igual para un panel.

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 ... ¿por qué un JDesktopPane? – kleopatra

+0

Estoy construyendo una aplicación donde quiero tener una barra de menú en cada pestaña extraíble para mostrar múltiples vistas del viento del mundo. Esto parecía una buena manera de hacerlo. No se pudo encontrar otra forma de tener una barra de menú separada para cada ventana. – user2248926

0

tengo otra solución, aunque hay que añadir el JMenuBar en los "otros componentes" en NetBeans (lo suficientemente bueno). Crea un JPanel y luego agrega otro JPanel adentro (llámalo hijo) que llene todo el JPter externo. Coloque sus controles en el panel secundario. A continuación, agregue el JMenuBar, pero NetBeans lo colocará en "Otros componentes". Editar su fuente y en el ctor después de que se llama "initComponents" Realizar una llamada a esta función:

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 
    } 

Por ejemplo, su ctor podría tener este aspecto:

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

funciona para mí. Entendí la idea mirando el código fuente de JInternalFrame. Todo lo que hace es reemplazar el JPanel hijo por un JRootPane() y luego colocar al niño en el panel de contenido del panel raíz.