Swing y JFC (Java Foundation Classes)

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.
  • DO_NOTHING_ON_CLOSE
  • HIDE_ON_CLOSE (por defecto)
  • DISPOSE_ON_CLOSE

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR