JAVA Swing
JAVA Swing
AWT y Swing son dos de las bibliotecas disponibles en el paquete estándar de Java
para la creación de interfaces gráficas de usuario. AWT descansa sobre el SO para la creación
de los componentes gráficos. Swing abstrae el SO y proporciona su propia colección de
componentes gráficos. Dicho en otras palabras, es una API para crear aplicaciones GUI en
Java. Este es un marco dependiente de la plataforma, es decir, los componentes de
la GUI de AWT no son los mismos en todas las plataformas.
Por otro lado, Swing es una biblioteca de gráficos para Java. Incluye elementos
de interfaz de usuario para GUI, como cuadros de texto, botones, listas desplegables y tablas.
Swing contiene componentes más flexibles y robustos que AWT. Swing proporciona los
mismos componentes básicos del kit de herramientas de Windows y también componentes
más avanzados como árbol, panel de pestañas, etc.
Componentes y Eventos
AWT incluye todos los componentes de AWT que estaban presentes en la versión 1.1.2
del JDK y aquellos que se han incorporado en:
Java 2D: Es un conjunto de clases gráficas bajo licencia de IBM/Taligent, que todavía
está en construcción
Accesibilidad: Proporciona clases para facilitar el uso de ordenadores y tecnología
informática a disminuidos, como lupas de pantalla, y cosas así
Arrastrar y Soltar (Drag and Drop): Son clases en las que se soporta Glasgow, que es la
nueva generación de los JavaBeans
Swing: Esta es la parte más importante y avanzada. Fue construido con Netscape y
proporciona una serie de componentes bien definidos y descritos de tal manera que su
presentación visual es independiente de la plataforma en la que se ejecuta el applet o la
aplicación que utiliza estas clases. Swing simplemente extiende AWT agregando un
conjunto de componentes, JComponents y sus clases de soporte. Hay muchos
componentes de Swing similares a AWT, algunos de los cuales comparten la
arquitectura Model-View-Controller (MVC), aunque Swing también proporciona otros
elementos de interfaz de usuario nuevos, como árboles, pestañas y más.
La estructura básica del AWT: Se basa en Componentes y Contenedores. Estos últimos
contienen Componentes posicionados a su respecto y son Componentes a su vez, de
forma que los eventos pueden tratarse tanto en Contenedores como en Componentes,
corriendo por cuenta del programador (todavía no hay herramientas de composición
visual) el encaje de todas las piezas, así como la seguridad de tratamiento de los
eventos adecuados.
Menús
Los menús siempre están en el centro de la aplicación, ya que son el medio por el cual
el usuario interactúa con la aplicación. La diferencia entre una aplicación útil y una
completamente molesta está en la organización de las listas, pero aquí las reglas para diseñar
un buen árbol de listas no están claras. Hay muchos libros sobre ergonomía y cómo interactúa
el usuario. Lo cierto es que por todos los que defienden una idea, tiene que haber alguien más
que defienda la contraria. Todavía no hay acuerdo para crear un estándar, se publica una guía
de estilo diferente con cada administrador de Windows.
MenuShorcut
java.awt.MenuComponent
java.awt.MenuBar
java.awt.MenuItem
java.awt.Menu
java.awt.CheckboxMenuItem
java.awt.PopMenu
En SWING los menús están formados por los siguientes componentes, estos componentes
permiten vincular opciones de menú en nuestras ventanas, tipo menú principal, como por
ejemplo el conocido Inicio, Archivo, Edición etc.
Sin embargo, Java brinda la capacidad de desarrollar nuestra interfaz de forma dinámica
mediante el uso del administrador de diseño o administrador de componentes, para ayudar a
adaptar los diferentes componentes que queremos combinar en un solo componente
incorporados a un panel, es decir, determina su forma cuando se coloca en el contenedor,
controla automáticamente el tamaño y la posición (layout). Para ello, Java dispone de varios
tipos de layout manager, a saber:
FlowLayout
BorderLayout
CardLayout
GridLayout
GridBagLayout
BoxLayout
OverlayLayout
CustomLayout
Por otro lado en Swing cuando hacemos ventanas, la clase que decide cómo se reparten los
botones (Y demás controles) dentro de la ventana se llama Layout. Esta clase es la que decide
en qué posición van los botones y demás componentes, si van alineados, en forma de matriz,
cuáles se hacen grandes al agrandar la ventana, etc.
Con un layout adecuado, el método pack() de la ventana hará que coja el tamaño necesario
para que se vea todo lo que tiene dentro.
ventana.pack();
Formularios
La ventana de diseño en Java es una herramienta útil que permite diseñar formularios
en java de forma relativamente sencilla, dentro del entorno sólo queda añadir componentes al
formulario como las etiquetas que marcan las opciones, los botones con los que se van a
realizar las acciones dentro de Java, los cuadros de textos donde se coloca el contenido que
comunica directamente el tema del sitio, de igual forma es posible cambiar sus propiedades
según los intereses del desarrollador web y de lo que se quiera lograr con el proyecto.
Ejemplo que muestra cómo crear formularios utilizando múltiples paneles (JPanels), unos
dentro de otros.
paneliz.add(dni);
panelde.setLayout(new GridLayout(4,0));
panelde.add(text1);
panelde.add(text2);
panelde.add(text3);
panelde.add(text4);
panelar.setLayout(new GridLayout(1,1));
panelar.setPreferredSize(new
Dimension(250,100));
panelar.add(paneliz);
panelar.add(panelde);
panelab.setLayout(new FlowLayout());
Applets
import java.applet.*;
//variables y métodos
import java.awt.*;
import java.applet.*;
g.drawString("Hola Mundo",30,30);
StyleConstants.setForeground( estilo,Color.red )
Por último, los objetos Graphics pueden mostrar imágenes a través del
método:
Hay que tener en cuenta que el método drawImage() necesita un objeto Image
y un objeto ImageObserver. Podemos cargar una imagen desde un fichero de dibujo
(actualmente sólo se soportan formatos GIF y JPEG) con el método getImage():
Animaciones
El hilo que se usa para el bucle con la espera es el hilo del main:
package chuidiang.ejemplos;
*
import javax.swing.jframe;
* @author chuidiang
import javax.swing.jpanel;
*
import javax.swing.windowconstants;
*/
public class pruebamovimiento extends jpanel // creacion y visualizacion de la
ventana
{
jframe v = new jframe();
/** coordenadas x1,y1 y x2,y2 de
los extremos de pruebamovimiento panel = new
pruebamovimiento();
* la raya.
v.getcontentpane().add(panel);
*/
v.pack();
public int x1 = 0;
v.setvisible(true);
public int y2 = 100;
{
* una diagonal cambia de vertices cada
segundo. if (panel.y1 == 0)
*/ else
{
if (panel.y2 == 0) e.printstacktrace();
panel.y2 = 100; }
else }
panel.y2 = 0; }
try super.paint(g);
thread.sleep(1000); }
* {
*/ }
Threads
Cuando dos threads corren en paralelo, ambas están siendo corridas al mismo
tiempo en diferentes CPUs. Dos thread concurrentes están en progreso, o intentando
de obtener tiempo de ejecución de la CPU al mismo tiempo, pero no necesariamente
están corriendo en forma simultánea en dos CPUs diferentes.