Vous êtes sur la page 1sur 7

Java swing

Que es
Para que siorve
Partes mas importantes



Swing, la solucin actual de Java para
crear GUIs
Introduccin:
El paquete Swing es parte de la JFC (Java Foundation Classes) en la plataforma
Java. La JFC provee facilidades para ayudar a la gente a construir GUIs. Swing
abarca componentes como botones, tablas, marcos, etc...
Las componentes Swing se identifican porque pertenecen al paquete javax.swing.
Swing existe desde la JDK 1.1 (como un agregado). Antes de la existencia de
Swing, las interfaces grficas con el usuario se realizaban a travs de AWT
(Abstract Window Toolkit), de quien Swing hereda todo el manejo de eventos.
Usualmente, para toda componente AWT existe una componente Swing que la
reemplaza, por ejemplo, la clase Button de AWT es reemplazada por la clase
JButton de Swing (el nombre de todas las componentes Swing comienza con
"J").
Las componentes de Swing utilizan la infraestructura de AWT, incluyendo el
modelo de eventos AWT, el cual rige cmo una componente reacciona a eventos
tales como, eventos de teclado, mouse, etc... Es por esto, que la mayora de los
programas Swing necesitan importar dos paquetes
AWT: java.awt.* y java.awt.event.*.
Ojo: Como regla, los programas no deben usar componenetes pesados de AWT
junto a componentes Swing, ya que los componentes de AWT son siempre
pintados sobre los de Swing. (Por componentes pesadas de AWT se entiende
Menu, ScrollPane y todas las componentes que heredan de las clases Canvas y
Panel de AWT).
Compilacin: Estndar.
Estructura bsica de una aplicacin Swing.


Una aplicacin Swing se construye mezclando componentes con las siguientes
reglas.
Debe existir, al menos, un contenedor de alto nivel (Top-Level Container),
que provee el soporte que las componentes Swing necesitan para el
pintado y el manejo de eventos.
Otras componentes colgando del contenedor de alto nivel (stas pueden
ser contenedores o componentes simples).
Ejemplo 1:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class HolaMundoSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("HolaMundoSwing");
final JLabel label = new JLabel("Hola Mundo");
frame.getContentPane().add(label);

//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.addWindowListener(new java.awt.event.WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);

frame.pack();
frame.setVisible(true);
}
}


En las primeras lneas se importan los paquetes necesarios.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
Luego se declara la clase HolaMundoSwing y en el mtodo main se setea el top
level container:

public class HolaMundoSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("HolaMundoSwing");
...
frame.pack();
frame.setVisible(true);
}
}
En el ejemplo, slo hay un contenedor de alto nivel, un JFrame. Un frame
implementado como una instancia de la clase JFrame es una ventana con
decoraciones, tales como, borde, ttulo y botones como conos y para cerrar la
ventana. Aplicaciones con un GUI tpicamente usan, al menos, un frame.
Adems, el ejemplo tiene un componente, una etiqueta que dice "Hola Mundo".
final JLabel label = new JLabel("Hola Mundo"); //construye el
JLabel.
frame.getContentPane().add(label); //agrega el label
al frame.
Para que el botn de cerrar cierre la ventana, hay dos opciones:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //JDK
1.3+

frame.addWindowListener(new java.awt.event.WindowAdapter(){
//versiones anteriores
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
Principales aspectos de una aplicacin Swing
Como ya se dijo antes, cada aplicacin Swing debe tener al menos un top-level
container que contendr toda la aplicacin, estos pueden ser
javax.swing.JFrame: Una ventana independiente.
javax.swing.JApplet: Un applet.
Dilogos: ventanas de interaccin sencilla con el usuario como por
ejemplo:
o java.swing.JOptionPane: Ventana de dilogo tipo SI_NO,
SI_NO_CANCELAR, ACEPTAR, etc...
o java.swing.JFileChooser: Ventana para elejir un archivo.
o java.swing.JColorChooser
o etc.
A un contenedor se le pueden agregar otros contenedores o componentes
simples, para ver una muestra visual de cada componente y sus respectivas
descripciones presione aqu
Configurando el "Look & Feel" de una aplicacin
Swing permite setear dinmicamente el aspecto y la forma de interaccin de una
aplicacin, por ejemplo el siguiente cdigo setea el L&F al estilo Java
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()
)
Existen los siguientes L&F:
Java look & feel
CDE/Motif look & feel
Windows look & feel
Configurando el "Layout" de un contenedor
Varias componentes pueden contener otras componentes dentro, para determinar
de qu modo esas componentes se organizarn visualmente se utiliza el concepto
de Layout. Por ejemplo, el siguiente cdigo crea un frame y setea el layout del
pao de contenidos (porcin central de la ventana) con BorderLayout y
finalmente agrega una etiqueta al sur de la ventana.
JFrame frame= new Jframe();
frame.getContentPane().setLayout(new BorderLayout());
JLabel label=new JLabel("yo voy abajo");
frame.add(label, BorderLayout.SOUTH);
A continuacin se muestran los diferentes layout estndares de swing.

Manejando eventos
Cada vez que el usuario interacta con la aplicacin se gatilla un evento, para que
una componente determinada reaccione frente a un evento, debe poseer
un "escuchador" con, al menos, un mtodo determinado que se ejecutar al
escuchar un evento en particular, por ejemplo, en el siguiente cdigo se crea un
botn que al ser presionado imprime en la salida estndar un mensaje.
JButton boton=new JButton("Un botn");
boton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("Me apretaron");
}
});
Swing puede generar un variado set de eventos, en la siguiente tabla se resumen
los ms comunes con sus respectivos "escuchadores".
Ejemplos de eventos y sus escuchadores
Accin que gatilla un evento Tipo de escuchador
El usario hace un click, presiona Return
en un rea de texto o selecciona un men
ActionListener
El usuario escoje un frame (ventana principal) WindowListener
El usuario hace un click sobre una componente MouseListener
El usuario pasa el mouse sobre una componente MouseMotionListener
Una componente se hace visible ComponentListener
Una componente adquiere el foco del teclado FocusListener
Cambia la seleccin en una lista o tabla ListSelectionListener
Threads y Swing
Como regla general slo un thread debe accesar una componente Swing, para
lograr esto, la receta es que slo el thread que atiende los eventos invoque los
mtodos de las componentes.
El siguiente cdigo sigue el patrn "The Single-Thread Rule".
//Ejemplo Thread-safe
public class MyApplication {
public static void main(String[] args) {
JFrame f = new JFrame(...);
...//agregar componentes al frame
f.pack();
f.setVisible(true);
//No hacer mas GUI
}

...
//Toda la manipulacin de la GUI -- setText, getText, etc.
//es efectuada por manejadores de eventos como actionPerformed().
...
}
Nota: algunos mtodos dentro de la API de Swing estn marcados como "thread
safe", stos pueden ser invocados concurrentemente por cualquier thread, el texto
que indica esto es: "This method is thread safe, although most Swing methods are
not."




En la siguente seccin veremos un ejemplo ms complejo que servir para
mostrar parte de la potencialidad de Swing
Ejemplo 2: Simple editor de texto