sábado, 14 de julio de 2012

4.3.1. Introducción al Java Swing


Java Swing

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").
Las componentes de Swing utilizan la infraestructura de AWT, incluyendo el modelo de eventos AWT, el cual rige cómo una componente reacciona a eventos tales como, eventos de teclado, mouse, etc... Es por esto, que la mayoría de los programas Swing necesitan importar dos paquetes AWT: java.awt.* yjava.awt.event.*.
Ojo: Como regla, los programas no deben usar componentes 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).
JLabel
Empezemos por uno de los elementos gráficos más sencillos, el JLabel, pero ahora utilicemos una aplicación gráfica utilizando extendí JFrame, veamos como quedaría una aplicación muy sencilla:
import javax.swing.*;
public class AplicacionSwing1 extends JFrame {

 public static void main( String argv[] ) {
   AplicacionSwing1 app = new AplicacionSwing1();
 }

 public AplicacionSwing1() {
   JLabel hola = new JLabel( "¡Hola, bienvenido a Java!" );
   getContentPane().add( hola,"Center" );
   setSize( 200,100);
   setVisible( true );
 }
}
La ejecución de esta aplicación sería:
Que nos presenta una ventana parecida a la del applet, pero ahora no tenemos que utilizar alguna página de html o ejecutar el mismo programa poniéndole el tag <applet code = …>
Analizando la aplicación gráfica, la manera de hacer esta aplicación es en el main se crea un objeto de la misma aplicación
 public static void main( String argv[] ) {
   AplicacionSwing1 app = new AplicacionSwing1();
 }
y se utiliza un constructor del nombre de la misma aplicación el cual crea los elementos gráficos, tal como se hacia en el init de un Applet:
 public AplicacionSwing1() {
   JLabel hola = new JLabel( "¡Hola, bienvenido a Java!" );
   getContentPane().add( hola,"Center" );
   setSize( 200,100);
   setVisible( true );
 }
El JLabel es la clase que nos permite tener más opciones que el Label normal del paquete awt.
Ahora podemos insertar iconos como parte de los parámetros del constructor, e inclusive podemos dar alineaciones a la etiqueta.
Una variación de esta aplicación es utilizar el constructor con alineación:
import javax.swing.*;
public class AplicacionSwing1 extends JFrame {

 public static void main( String argv[] ) {
   AplicacionSwing1 app = new AplicacionSwing1();
 }

 public AplicacionSwing1() {
   JLabel hola = new JLabel( "¡Hola, bienvenido a Java!",JLabel.RIGHT);
   getContentPane().add( hola,"Center" );
   setSize( 200,100);
   setVisible( true );
 }
}
La aplicación quedaría como:
Ahora si queremos utilizar la misma aplicación, pero con un icono, podemos tener la siguiente aplicación gráfica:
import java.awt.*;
import javax.swing.*;
public class AplicacionSwing2 extends JFrame {

 public static void main( String argv[] ) {
   AplicacionSwing2 app = new AplicacionSwing2();
   app.setSize( 300,150 );
app.setVisible( true );
 }  

 public AplicacionSwing2() {
  setLayout(new GridLayout(1,1,5,5));
   Icon icon = new ImageIcon("ejercicio.gif");
   JLabel hola = new JLabel( icon, JLabel.CENTER);
add( hola );
 }
}
La cual despliega el siguiente Frame:
Donde el icono “ejercicio.gif” aparece centrado.
JButton, JToogleButton, JCheckBox, JRadioButton
El JButton al igual que el Button le permite al usuario dar acciones para la ejecución de algún grupo de instrucciones. Veamos una aplicación que tiene varios tipos de botones:
import java.awt.*;
import javax.swing.*;
public class AplicacionSwing3 extends JFrame {

 public static void main( String argv[] ) {
   AplicacionSwing3 app = new AplicacionSwing3();
   app.setSize( 300,150 );
app.setVisible( true );
 }  

 public AplicacionSwing3() {
  setLayout(new GridLayout(4,1,5,5));
  JButton boton1 = new JButton("JButton");
  JToggleButton boton2 = new JToggleButton("JToggleButton");
  JCheckBox boton3 = new JCheckBox("JCheckBox");
  JRadioButton boton4 = new JRadioButton("JRadioButton");
  add(boton1);
  add(boton2);
  add(boton3);
  add(boton4);
  }
}
La ejecución de esta aplicación gráfica sería:
Al seleccionar el JToggleButton se sombre, el JCheckBox se selecciona con una marcha  y el JRadioButton se selecciona con un punto adentro.
Los constructores del JButton son:
Utilizando el constructor que tiene el icono como parámetro la aplicación quedaría así:
import java.awt.*;
import javax.swing.*;
public class AplicacionSwing3 extends JFrame {

 public static void main( String argv[] ) {
   AplicacionSwing3 app = new AplicacionSwing3();
   app.setSize( 300,150 );
app.setVisible( true );
 }  

 public AplicacionSwing3() {
  setLayout(new GridLayout(4,1,5,5));
  Icon icon = new ImageIcon("star0.gif");
  JButton boton1 = new JButton("JButton", icon);
  JToggleButton boton2 = new JToggleButton("JToggleButton");
  JCheckBox boton3 = new JCheckBox("JCheckBox");
  JRadioButton boton4 = new JRadioButton("JRadioButton");
  add(boton1);
  add(boton2);
  add(boton3);
  add(boton4);
  }
}
Y la ejecución de la aplicación se vería así:
La manera en la que se realizan las operaciones para el botón en esta aplicación gráfica es igual que con el applet, hay que darle a cada botón la facilidad de que sea utilizado con el addActionListener e implementar también esta clase y utilizar el actionPerformed para ejecutar las instrucciones.
JList, JCombo
Las listas y cajas "combo" en Swing funcionan del mismo modo que lo hacían en el AWT, aunque tienen incrementada la funcionalidad a través de algunas funciones de conveniencia que se han incorporado. Por ejemplo, JList tiene un constructor al que se puede pasar un array de objetos String para que los presente, un ejemplo es la siguiente aplicación:
import java.awt.*;
import javax.swing.*;
public class AplicacionSwing4 extends JFrame {
 private static String datos[] = {
   "Uno","Dos","Tres",
   "Cuatro","Cinco","Seis",
 };
 public static void main( String argv[] ) {
   AplicacionSwing4 app = new AplicacionSwing4();
   app.setSize( 300,150 );
app.setVisible( true );
 }  

 public AplicacionSwing4() {
  setLayout(new GridLayout(2,1,5,5));
  JList lista = new JList( datos );
   add( new JScrollPane( lista ) );    
   JComboBox combo = new JComboBox();
   for( int i=0; i < 100; i++ )
     combo.addItem( Integer.toString( i ) );
   add( combo );
 }
}
La muestra de la aplicación ejecutando sería:
Donde al seleccionar la barra deslizadora del objeto JList podemos seleccionar alguno de los elementos de la lista, igual podemos hacer con el objeto de la clase Combo:

No hay comentarios:

Publicar un comentario en la entrada