La mayor�a de las aplicaciones Swing presentan su GUI principal dentro de un JFrame -- un contenedor Swing de alto nivel que proporciona ventanas para applets y aplicaciones. Un frame tiene decoraciones como un borde, un t�tulo, y botones para cerrar y minimizar la ventana. Un programa t�pico s�mplemente crea un frame, a�ade componentes al panel de contenido, y quiz�s a�ade una barra de men�. Sin embargo, a trav�s de su panel ra�z, JFrame proporciona soporte para una mayor personalizaci�n.
Para crear una ventana que sea dependiente de otra ventana -- que desaparezca cuando la otra ventana se minimiza, por ejemplo -- se utiliza un di�logo en vez de un frame. Para crear una ventana que aparece dentro de otra ventana se utiliza un frame interno.
Aqu� podemos ver dos im�genes del mismo programa, FrameDemo.java, ejecut�ndose en distintas plataformas. El programa trae un frame que contiene algo interesante que ver.
Solaris | Windows |
---|---|
� |
[PENDIENTE] |
Nota:La decoraci�n de un frame es dependiente del sistema. No se puede cambiar la decoraci�n de un frame. |
Abajo podemos ver el c�digo de FrameDemo.java que crea el frame del ejemplo anterior.
public static void main(String s[]) { JFrame frame = new JFrame("A Basic Frame"); WindowListener l = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; frame.addWindowListener(l); JLabel aLabel = new JLabel("Something to look at", new ImageIcon("images/beach.gif"), JLabel.CENTER); aLabel.setVerticalTextPosition(JLabel.TOP); aLabel.setHorizontalTextPosition(JLabel.CENTER); frame.getContentPane().add(aLabel, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); }
El c�digo crea un frame con el t�tulo A Basic Frame y a�ade un oyente de window para salir del programa cuando el usuario cierre el frame.
Las l�neas en it�lica del c�digo crean la etiqueta que muestra el texto y la imagen del frame. Este es esencialmente el GUI del programa. Si queremos utilizar este programa como marco de trabajo para nuestros propios programas, s�lo tenemos que reemplazar el c�digo en it�lica para crear los componentes que querramos.
El c�digo en negrita a�ade la etiqueta al panel de contenido del frame. Puedes ir a A�adir Componentes a un Frame para m�s detalles y ejemplos.
Para que un frame aparezca en la pantalla, un programa debe llamar a setSize o a pack, y luego llamar a setVisible(true) o su equivalente, show. Este programa empaqueta el frame y utiliza setVisible. Observa que si cualquier parte del GUI ya es visible, deber�amos invocar a setVisible desde el thread de lanzado de eventos. Puedes ver la p�gina Threads y Swing.
Este c�digo es t�pico de muchos programas y es el marco de trabajo que hemos utilizado para crear la mayor�a de los ejemplos de esta lecci�n (incluyendo GlassPaneDemo.java y BorderDemo.java). Algunos ejemplos como TextFieldDemo.java y TableDemo.java, subclasifican JFrame y ejemplarizan la subclase frame en vez JFrame. En esos programas, el GUI se crea en el constructor de la subclase. Podr�amos hacer esto en nuestros programas si necesitaramos subclasificar JFrame por alguna raz�n.
JFrame es una subclase de java.awt.Frame a la que a�ade soporte para la interposici�n de entradas y comportamiento de pintado contra el frame hijo, situando hijos en diferentes "capas" (layers) y para barras de men�s Swing. Generalmente hablando, deber�amos utilizar JFrame en vez de Frame, por estas razones.
- Para aprovechar las nuevas caracter�sticas proporcionadas por su panel ra�z como el panel transparente y el panel de capas.
- JFrame permite personalizar el comportamiento de la ventana, llamando al m�todo setDefaultCloseOperation en vez de escribir un oyente de window.
- JFrame soporta el m�todo revalidate.
- Los men�s Swing funcionan mejor en un JFrame debido a sus m�todos setJMenuBar.
- Deber�amos utilizar JFrame en un applet si �ste utiliza componentes Swing. Tambi�n, recomendamos la utilizaci�n de JFrame en una aplicaci�n que utilice componentes Swing, aunque no es necesario.
�A�adir Componentes a un Frame
Como se ha visto en FrameDemo.java, para a�adir componentes a un JFrame, se a�aden a su panel de contenido. Las dos t�cnicas m�s comunes para a�adir componetes al panel de contenido de un frame son.
- Crear un contenedor como un JPanel, JScrollPane, o un JTabbedPane, y a�adirle componentes, luego utilizar JFrame.setContentPane para convertirlo en el panel de contenido del frame.
TableDemo.java utiliza esta t�cnica. El c�digo crea un panel desplazable para utilizarlo como panel de contenido del frame. Hay una tabla en el panel desplazable.
public class TableDemo extends JFrame { public TableDemo() { super("TableDemo"); MyTableModel myModel = new MyTableModel(); JTable table = new JTable(myModel); table.setPreferredScrollableViewportSize(new Dimension(500, 70)); //Create the scroll pane and add the table to it. JScrollPane scrollPane = new JScrollPane(table); //Add the scroll pane to this window. setContentPane(scrollPane); . . .
- Utilizar JFrame.getContentPane para obtener el panel de contenido del frame. A�adir componentes al objeto devuelto.LayeredPaneDemo.java utiliza esta t�cnica mostrada aqu�.
...//create the components... //get the content pane, add components to it: Container contentPane = getContentPane(); // use a layout manager that respects preferred sizes contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS)); contentPane.add(Box.createRigidArea(new Dimension(0, 10))); contentPane.add(controls); contentPane.add(Box.createRigidArea(new Dimension(0, 10))); contentPane.add(emptyArea);
El controlador de disposici�n por defecto para el panel de contenido de un frame es BorderLayout. C�mo se ha visto en los ejemplos anteriores, se puede invocar al m�todo setLayout sobre el panel de contenidos para cambiar su controlador de disposici�n.
�EL API JFrame
Las siguientes tablas listan los m�todos y constuctores m�s utilizados de JFrame. Existen otros m�todos que podr�amos llamar y que est�n definidos en las clases Frame y Window y que incluyen pack, setSize, show, hide, setVisible, setTitle, y getTitle.
La mayor parte de la opraci�n de un frame est� manejada por otros objetos. Por ejemplo, el interior de un frame est� manejado por su panel ra�z, y el panel de contenido contiene el GUI del frame.
El API para utilizar Frames se divide en dos categor�as.
�Crear y configurar un Frame
M�todo | Prop�sito |
---|---|
JFrame()
JFrame(String) |
Crea un frame. El argumento String proporciona el t�tulo del frame. |
void setDefaultCloseOperation(int)
int getDefaultCloseOperation() |
Selecciona u obtiene la operaci�n que ocurre cuando el usuario pulsa el bot�n de cerrar la ventana. Las posibles elecciones son.
Estas constantes est�n definidas en el interface WindowConstants. |
�Seleccionar y Obtener los objetos auxiliares de un Frame
M�todo | Prop�sito |
---|---|
void setContentPane(Container)
Container getContentPane() |
Selecciona u obtiene el panel de contenido del frame. Tambi�n se puede hacer a trav�s del panel ra�z del frame. |
JRootPane createRootPane()
void setRootPane(JRootPane) JRootPane getRootPane() |
Crea, selecciona u obtiene el panel ra�z del frame. El panel ra�z maneja el interior de frame, incluyendo el panel de contendido, el panel transparente, etc. |
void setJMenuBar(JMenuBar)
JMenuBar getJMenuBar() |
Selecciona u obtiene la barra de men� del frame. Tambi�n se puede hacer a trav�s del panel ra�z del frame. |
void setGlassPane(Component)
Component getGlassPane() |
Selecciona u obtiene el panel transparente del frame. Tambi�n se puede hacer a trav�s del panel ra�z del frame. |
void setLayeredPane(JLayeredPane)
JLayeredPane getLayeredPane() |
Selecciona u obtiene el panel de capas del frame. Tambi�n se puede hacer a trav�s del panel ra�z del frame. |