- Este es un ejemplo de las características básicas de una aplicación con SWING.
- Cada programa es SWING esta dividido en:
1. import de paquetes gráficos
2. Configurar el contenedor de alto nivel
3. Mostrar el contenedor
4. Asegurar consistencia del programa. (thread-safe)
2.1. import de paquetes gráficos
- La primera línea incorpora el SWING en el programa
import javax.swing.*;
- En la mayoría de programas se requiere importar además paquetes AWT.
- Estos paquetes se requieren porque SWING usa la infraestructura AWT.
- También usa los eventos AWT.
- Un evento es una acción sobre la aplicación. (presionar un botón, seleccionar un menú...)
import java.awt.*;
import java.awt.event.*;
2.2. Configurar el contenedor de alto nivel
- Cada programa Swing debe tener al menos un contenedor de alto nivel
- Un contenedor de alto nivel muestra y maneja los eventos de sus componentes.
- Se cuenta con tres contenedores de alto nivel: JApplet, JFrame, JDialog.
- JFrame implementa la ventana principal de la aplicación.
- JDialog implementa las ventanas secundarias generadas por otras ventanas.
- JApplet implementa un applet en un browser.
- JFrame implementa los elementos por defecto de una ventana como bordes, titulo, cambio de tamaño, botón para inconizar y cerrar. Estos elementos se llaman decorators. (versión 1.4)
JFrame.setDefaultLookAndFeelDecorated(true);
- La variable frame es un objeto de clase JFrame
- El siguiente código define el contenedor principal.
JFrame frame = new JFrame("HelloWorldSwing");
- Los contenedores de alto nivel (como JFrame) heredan de java.awt.Window
- Los componentes de los contenedores heredan de javax.swing.Jcomponent
- El programa usa un JComponent llamado Jlabel que muestra un texto.
- Estas líneas crean el componente JLabel y lo agregan al contenedor JFrame
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
- El JLabel no se agrega directamente al JFrame, sino a la zona de contenidos (contentPane)
- Todos los contenedores de alto nivel tienen una zona de contenidos
- Los componentes de la ventana se encuentran en esta zona
- No se encuentran en esta zona los menús ni los decorators.
- En la versión 1.5 se evitara la complejidad del contentPane y se podrá utilizar directamente el frame.
- Para que el programa termine al presionar el botón Close se requiere:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
2.3. Mostrar el contenedor.
- Para mostrar el contenedor se realiza lo siguiente:
frame.pack();
frame.setVisible(true);
- la primera línea coloca el tamaño de la ventana de acuerdo a sus componentes.
2.4. Asegurar la consistencia.
- Este código asegura que la ventana no se cuelgue antes de mostrarse en pantalla.
javax.swing.SwingUtilities.invokeLater
( new Runnable() {
public void run() { crearMostrarVentana(); }
}
);
2.5. Laboratorio
Modifique el programa cambiando los mensajes del programa. Pruebe los botones de la ventana.
TestSwing.java import javax.swing.*; public class TestSwing { public static void main(String[] args) { //Enviar una tarea al administrador de eventos //para que cree y muestre la ventana javax.swing.SwingUtilities.invokeLater ( new Runnable() { public void run() { crearMostrarVentana(); } } ); } // Metodo para crear una ventana. private static void crearMostrarVentana() { //Asegurarse que contenga los decorators de una ventana. JFrame.setDefaultLookAndFeelDecorated(true); //Crear y configurar la ventana JFrame frame = new JFrame("TestSwing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Agregar un label que muestre "Hola Mundo!" JLabel label = new JLabel("Hola Mundo!"); frame.getContentPane().add(label); //Mostrar la ventana frame.pack(); frame.setVisible(true); } }
0 comentarios:
Publicar un comentario