En general, no se crea directamente un objeto JRootPane. En su lugar, se obtiene un JRootPane (tanto si se quiere como si no!) cuando se ejemplariza un JInternalFrame o uno de los contenedores Swing de alto nivel -- JApplet, JDialog, JFrame, y JWindow.
La p�gina Reglas Generales para Usar Componentes Swing explica lo b�sico sobre el uso de paneles ra�z -- obtener el panel de contenido, seleccionar su controlador de distribuci�n, y a�adirle componentes Swing. Esta p�gina explica m�s cosas sobe los paneles ra�z, incluyendo los componentes que crean un panel ra�z, y c�mo poder utilizarlos.
Un panel ra�z se divide en cuatro partes.
- El Panel de Cristal
- Oculto, por defecto. Si se hace visible, es como si se pusiera una hoja de cristal sobre las otras partes del panel raiz. Es completamente transparente (a menos que hagamos que el m�todo paint haga algo) e intercepta los eventos de entrada para el panel ra�z. En la siguiente secci�n, veremos un ejemplo de utilizaci�n de un panel de cristal.
- El panel de capas
- Sirve para posicionar sus contenidos, que consisten en el panel de contenido y la barra de men� opcional. Tambi�n puede contener otros componentes en un orden Z especificado. Para m�s informaci�n puedes ver C�mo usar Layered Panes.
- El Panel de Contenido
- El contenedor de los componentes visibles del panel ra�z, excluyendo la barra de men�.
- La barra de men� opcional
- El hogar para los men�s del panel de contenido. Si el contenedor tiene una barra de men�s, generalmente se utilizan los m�todos setMenuBar o setJMenuBar del contenedor para poner la barra de men� en el lugar apropiado.
�El Panel de Cristal
El panel de cristal es �til cuando queremos poder capturar eventos o dibujar sobre un �rea que ya contiene uno o m�s componentes. Por ejemplo, podemos desactivar los eventos de rat�n para una regi�n multi-componente haciendo que el panel de cristal intercepte los eventos. O podemos mostrar un cursor de espera sobte en panel ra�z completo utilizando el panel de cristal.
Aqu� podemos ver una imagen de una aplicaci�n que demuestra las caracter�sticas del panel de cristal. Contiene un checkbox que permite seleccionar si el panel de cristal es "visible" -- se puede obtener eventos y dibujar sobre su propia parte de pantalla. Cuando un panel de cristal es visible, bloquea todas las entradas desde los componentes del panel de contenidos. Tambi�n dibuja un punto rojo donde se detect� el �ltimo evento de pulsaci�n de rat�n.

Intenta esto:
|
El siguiente c�digo de GlassPaneDemo.java muestra y oculta el panel de cristal. Sucede que este programa para crear su propio panel de cristal lo selecciona utilizando el m�todo setGlassPane de JFrame. Sin embargo, si un panel de cristal no hace ning�n dibujo, el programa podr�a simplemente a�adir oyentes al panel de cristal por defecto, como los devueltos por getGlassPane.
./where GlassPaneDemo's UI is initialized: JCheckBox changeButton = new JCheckBox("Glass pane \"visible\""); changeButton.setSelected(false); changeButton.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { myGlassPane.setVisible(e.getStateChange() == ItemEvent.SELECTED); } });
El siguiente fragmento de c�digo implementa el manejo de eventos de raton para el panel de cristal. Si ocurre un evento de rat�n sobre el checkbox o la barra de men�s, entonces el panel de cristal redirecciona el evento para que el checkbox o el men� lo reciban. Para que el checkbox y el men� se comporten apropiadamente, tambi�n reciben todos los eventos drag que empiezan con una pulsaci�n en el checkbox o en la barra de men�.
./In the implementation of the glass pane's mouse listener: public void mouseMoved(MouseEvent e) { redispatchMouseEvent(e, false); } .* The mouseDragged, mouseClicked, mouseEntered, * mouseExited, and mousePressed methods have the same * implementation as mouseMoved*/... public void mouseReleased(MouseEvent e) { redispatchMouseEvent(e, true); inDrag = false; } private void redispatchMouseEvent(MouseEvent e, boolean repaint) { boolean inButton = false; boolean inMenuBar = false; Point glassPanePoint = e.getPoint(); Component component = null; Container container = contentPane; Point containerPoint = SwingUtilities.convertPoint( glassPane, glassPanePoint, contentPane); int eventID = e.getID(); if (containerPoint.y < 0) { inMenuBar = true; //...set container and containerPoint accordingly... testForDrag(eventID); } component = SwingUtilities.getDeepestComponentAt( container, containerPoint.x, containerPoint.y); if (component.equals(liveButton)) { inButton = true; testForDrag(eventID); } if (inMenuBar || inButton || inDrag) { ./Redispatch the event to component... } if (repaint) { toolkit.beep(); glassPane.setPoint(glassPanePoint); glassPane.repaint(); } } private void testForDrag(int eventID) { if (eventID == MouseEvent.MOUSE_PRESSED) { inDrag = true; } }
Aqu� est� el c�digo que implementa el dibujo para el panel de cristal.
./where GlassPaneDemo's UI is initialized: myGlassPane = new MyGlassPane(...); frame.setGlassPane(myGlassPane); ... /** * We have to provide our own glass pane so that it can paint. */ class MyGlassPane extends JComponent { Point point = null; public void paint(Graphics g) { if (point != null) { g.setColor(Color.red); g.fillOval(point.x - 10, point.y - 10, 20, 20); } } ... }
�El API de Root Pane
Las siguientes tablas listan el API para utilizar paneles ra�z, paneles de cristal y paneles de contenido.
El API para utilizar otras partes del panel ra�z se describe en .
�Usar un Panel Ra�z
M�todo | Prop�sito |
---|---|
JRootPane getRootPane()
(en JApplet, JDialog, JFrame, JInternalFrame, y JWindow) |
Obtiene el panel ra�z del applet, dialog, frame, internal frame, o window. |
JRootPane SwingUtilities.getRootPane(Component) | Si el componente tiene un panel ra�z, lo devuelve. Si no es as�, devuelve el panel ra�z (si existe) que contiene el componente. |
JRootPane getRootPane()
(en JComponent) |
Invoca al m�todo SwingUtilitiesgetRootPane sobre JComponent. |
void setDefaultButton(JButton)
JButton getDefaultButton() |
Selecciona u obtiene qu� bot�n (si existe) es el bot�n por defecto del panel ra�z. Una acci�n espec�fica del aspecto y comportamiento, como pulsar ENTER, hace que se realice la acci�n del bot�n. |
�Seleccionar u Obtener el Panel de Cristal
M�todo | Prop�sito |
---|---|
setGlassPane(Component)
Component getGlassPane() (en JApplet, JDialog, JFrame, JInternalFrame, JRootPane, y JWindow) |
Selecciona u obtiene elpanel de cristal. |
�Usar el Panel de Contenido
M�todo | Prop�sito |
---|---|
setContentPane(Container)
Container getContentPane() (en JApplet, JDialog, JFrame, JInternalFrame, JRootPane, y JWindow) |
Selecciona u obtiene el panel de contenido. |