Escolar Documentos
Profissional Documentos
Cultura Documentos
ISC- 0402
INTRODUCCION
En el siguiente trabajo escrito, presentaremos la información que logramos obtener a través
de la web sobre los conceptos Swing y AWT, enfocados a la materia de tópicos avanzados de
programación.
Así mismo, incluiremos algunos términos extras y de suma relevancia, tales como: botones,
etiquetas, cajas de texto, etc; buscando aunarlo a la práctica en nuestro programa de
desarrollo de aplicaciones llamado Eclipse.
MARCO TEORICO
Ambas forman parte del grupo de librerías que en Java nos permiten construir nuestra propia
interfaz gráfica, pero ¿Acaso una de ellas es mejor que la otra? empecemos diciendo que
AWT es realmente el método "viejo", ya que fue la primera librería proporcionada por Java
para crear nuestra propia GUI, Swing por otro lado sería el método "nuevo" ya que llegó con la
intención de subsanar los inconvenientes que representaba AWT, estos inconvenientes solo
se evidenciaban bajo el concepto de multiplataforma de Java, observa la tabla a continuación :
AWT Swing
Usa componentes del S.O. Dibuja sus propios componentes
El S.O. maneja los eventos Java maneja los eventos
La apariencia cambia con el S.O Tienen la misma apariencia en cualquier S.O.
La apariencia es estática Se puede personalizar con los Look & Feel
Luego de ver esta tabla y el video que encabeza esta entrada, nos queda claro el principal
inconveniente al usar AWT, en cada sistema operativo nuestra interfaz va a tener una
apariencia diferente y es posible que incluso parte del comportamiento sea diferente también,
ya que los eventos son manejados por el sistema operativo, esto hacía que desarrollar
aplicaciones con interfaz gráfica en Java fuera algo tedioso, había que verificar que servía y
que no en cada sistema, por lo que el eslogan de java: "Escribe una vez y ejecútalo donde
quieras" se veía un poco afectado.
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...
Swing existe desde la JDK 1.1 (como un agregado). Antes de la existencia de Swing, las
interfaces gráficas con el usuario se realizaban a través 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").
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).
Compilación: Estándar.
Una aplicación 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.*;
//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);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
En el ejemplo, sólo 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, título y
botones como íconos y para cerrar la ventana. Aplicaciones con un GUI típicamente usan, al
menos, un frame.
Además, el ejemplo tiene un componente, una etiqueta que dice "Hola Mundo".
Como ya se dijo antes, cada aplicación Swing debe tener al menos un top-level container que
contendrá toda la aplicación, estos pueden ser
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName())
Varias componentes pueden contener otras componentes dentro, para determinar de qué
modo esas componentes se organizarán visualmente se utiliza el concepto de Layout. Por
ejemplo, el siguiente código crea un frame y setea el layout del paño de contenidos (porción
central de la ventana) con BorderLayout y finalmente agrega una etiqueta al sur de la ventana.
frame.getContentPane().setLayout(new BorderLayout());
frame.add(label, BorderLayout.SOUTH);
A continuación se muestran los diferentes layout estándares de swing.
Manejando eventos
Cada vez que el usuario interactúa con la aplicación se gatilla un evento, para que una
componente determinada reaccione frente a un evento, debe poseer un "escuchador" con, al
menos, un método determinado que se ejecutará al escuchar un evento en particular, por
ejemplo, en el siguiente código se crea un botón que al ser presionado imprime en la salida
estándar un mensaje.
Swing puede generar un variado set de eventos, en la siguiente tabla se resumen los más
comunes con sus respectivos "escuchadores".
Ejemplos de eventos y sus escuchadores
Acción que gatilla un evento Tipo de escuchador
El usuario hace un click, presiona Return ActionListener
en un área de texto o selecciona un menú
El usuario escoge 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 selección en una lista o tabla ListSelectionListener
Threads y Swing
Como regla general sólo un thread debe accesar una componente Swing, para lograr esto, la
receta es que sólo el thread que atiende los eventos invoque los métodos de las
componentes.
//Ejemplo Thread-safe
...
//Toda la manipulación de la GUI -- setText, getText, etc.
//es efectuada por manejadores de eventos como actionPerformed().
...
}
Nota: algunos métodos dentro de la API de Swing están 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."
DESARROLLO
CONCLUSIONES
REFERENCIAS
http://giovaelpetv.blogspot.com/2016/12/cual-es-la-diferencia-entre-swing-y-awt.html
https://users.dcc.uchile.cl/~lmateu/CC60H/Trabajos/edavis/swing.html
https://personales.unican.es/corcuerp/java/Slides/GUIs_AWT_Swing.pdf