1. Programación I-JAVA
I. Tema: Clase Swing
I.I. Definición Clase Swing:
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 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.* y java.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).
I.II. Controles Swing Básicos: jLabel, jTextField y jButton
Las ventanas de control JFrame contienen un contenedor y dentro de este,
debemos agregarle un panel de contenido donde incluiremos todos los controles
que vayamos a usar. Para ello, utilizaremos su método "getContentPane()". Es
decir,antesde incluircualquiercontrol,estosnecesitaranestarincluidosdentrodel
panel.
Además de ello, también podemos incluir un gestor de organización
llamados Layout para la distribución de los controles. En nuestro caso, lo que
2. haremos seráanular este gestor,de estaforma, tendremoslibre la distribuciónde
los controles.
Una vez incluidoel panelyanuladoel gestorde organización,yapodemosincluir
nuestroscontrolesyunode ellosvaa ser JLabel.
I.II.I JLabel
Este control, es una simple etiqueta donde pondremos texto fijo.
Para añadir un control, ademas de importar su paquete, debemos paser
tres fases. Primero, instanciar el control, segundo colocarlo en una
ubicacionyterceroañadirloal panel conel metodo"add()".Quedariaasi:
JLabel etiqueta=new JLabel("Aqui irael texto");
etiqueta.setBounds(10,25,120,20);
this.getContentPane.add(etiqueta);
Por tanto, imaginemosque queremos crear una ventana de ancha 300 y
alto 200 y queremos incluir en su interior un simple texto. El codigo
quearia asi:
importjavax.swing.JFrame;
importjavax.swing.JLabel;
publicclassVentanaextendsJFrame
{
publicVentana(){
this("Mi primeraventana",10,10,300,200);
}
publicVentana(Stringtitulo,intx,inty,intw, inth){
super(titulo);
3. this.getContentPane().setLayout(null); //Dentro del panel,le digo
que anuloel Layout
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setBounds(x,y,w,h);
this.setVisible(true);
JLabel lblTexto=new JLabel("Estoes unaetiquetade texto");
lblTexto.setBounds(10,25,120,20); //Situola etiquetaenel lugar
que yo quiera
this.getContentPane().add(lblTexto);
}
publicstaticvoidmain(String[]args){
}
}
Ejecutael programa y verasla etiquetade textodentrode laventana.
Intentaejecutarloeliminantoel codigo
"this.getContentPane().setLayout(null);"averque ocurre.No podras
situarla etiquetade textodonde tuquieras.
I.II.II. JTextField
Este control esel que utilizamoscomocampodetexto,enel podremos
introducir texto para posteriormente utilizarlo a nuestra conveniencia.
Ahora vamos a colocar en la ventana un campo de texto para poder
escribir en el.
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JTextField;
publicclassVentanaextendsJFrame{
4. publicVentana(){
this("Mi primeraventana",10,10,300,200);
}
publicVentana(Stringtitulo,intx,inty,intw, inth){
super(titulo);
this.getContentPane().setLayout(null); // Dentrodel panel,le
digoque anuloel Layout
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setBounds(x,y,w,h);
this.setVisible(true);
JLabel lblTexto=new JLabel("Estoesunaetiquetade texto");
lblTexto.setBounds(10,25,120,20); // Situolaetiquetaenel
lugarque yo quiera
this.getContentPane().add(lblTexto);
JTextFieldcmpNombre =new JTextField();
cmpNombre.setBounds(10,50,100,20);
this.getContentPane().add(cmpNombre);
}
publicstaticvoidmain(String[]args){
}
}
Prueba a ejecutarlo ahora, veras que dispones de un campo de texto
donde puedes escribir cualquier cosa. Cuando creas la instancia de este
control, puedes dejar un texto predeterminado:
JTextFieldcmpNombre =new JTextField("Escribe tunombre");
5. I.II.III. JButton
Este es el control de los famosos botones, con ellos podremos
programar las acciones que creamos pertinentes para ellos. Como lo
mismo con los otros controles su codigo es el siguiente:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
public class Ventana extends JFrame{
public Ventana(){
this("Mi primera ventana",10,10,300,200);
}
public Ventana(String titulo, int x, int y, int w, int h){
super(titulo);
this.getContentPane().setLayout(null); // Dentrodel panel,ledigo
que anulo el Layout
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setBounds(x,y,w,h);
this.setVisible(true);
JLabel lblTexto = new JLabel("Esto es una etiqueta de texto");
lblTexto.setBounds(10,25,120,20); // Situolaetiquetaenel lugar
que yo quiera
this.getContentPane().add(lblTexto);
JTextField cmpNombre = new JTextField();
cmpNombre.setBounds(10,50,100,20);
this.getContentPane().add(cmpNombre);
6. JButton btnCopiar = new JButton("Copiar");
btnCopiar.setBounds(25,80,100,20);
this.getContentPane().add(btnCopiar);
}
public static void main(String[]args){
}
}
I.II. Propiedades y eventos:
Una aplicación sin usar Formulario A continuación vamos a desarrollar una
aplicación sencilla que permita calcular el área del triángulo dado los valores de
la base y la altura. Nose utilizaráformulario,perosílas clasesdel paquete swing
para ingresos y salida de datos.
Solución:
7. ● Estando en el entorno de desarrollo NetBeans seleccionamos la opción del
menú y luego la opción New Proyect
8. ● Seleccionamos para Categories Java y para Proyects Java Application y luego
damos click en el botón de comando Next.
● Usamos el botón de comando Browse para crear una carpeta denominada
Ejercicios en la unidad E. En Proyect Name colocamos AreaTriangulo y en el
cuadro de textoreferidoaCreate MainClasscolocamosejercicios.AreaTriangulo,
lo cual permitirá crear un paquete denominado ejercicios y como primera clase
AreaTriangulo,esdecir,se crea el archivoAreaTriangulo.javaque perteneceráal
paquete ejercicios.
● Sabemos que en Java una clase tiene comúnmente al método Main que es el
método que se ejecuta cuando se aplica Run a la aplicación construida. En el
entorno de NetBeans, una clase creada, crea un método que tiene el mismo
nombre de laclase alaque sedenominamétodoconstructorytodaprogramación
hechaenéste métodose ejecutaráprimeroantesque el métodomain.NetBeans
generará un paquete (Package) denominado ejercicios y dentro de ella se
mostrará la clase de acceso público AreaTriangulo. El entorno de desarrollo de
NetBeans después de dar click en el botón Finish queda así:
9. ● Agregamos al código de la programación generada, por debajo del package
ejercicios, lo siguiente:
import java.io.*;
import javax.swing.*;
El paquete javax.swing.*;permitirápodercrearingresosysalidade datosatravés
de cajas de mensaje.
● Agregamos al código en el método Main de la clase AreaTriangulo como se
aprecia a continuación (lo escrito en azul).
package
ejercicios;
import java.io.*;
import
javax.swing.*;
/**
*
* @author Administrador
*/ public class AreaTriangulo {
/** * @param args the command line arguments
10. */ public static void main(String[] args) throws IOException
i
int base, altura;
double area;
base=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese la base: "));
altura=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese la altura"));
area=base*altura/2;
JOptionPane.showMessageDialog(null,"El area del triangulo es: "+area);
}
}
En el método main observamos que para leer el dato para la variable base
utilizamos el método showInputDialog de la clase JOptionPane que a su vez
pertenece al paquete swing,que mostraráun caja de mensaje para la lecturade
datos. De igual manera se trabajará para leer el dato de altura.
Tambiénse observael métodoshowMessageDialogde laclase JOptionPaneque
permite mostrar en una caja de mensaje el resultado del cálculo del área.
● SeleccionamosAreaTrianguloenel entornode desarrollode NetBeansyluego
damos click botón derecho del mouse. Se visualiza un menú flotante,se elige la
opción Run File y se procederá a ejecutar el programa.
● Cuando la aplicación es ejecutada se visualizará la siguiente ventana:
11. Nos pide el ingreso del valor de la base y luego de dar click en el botón de
comando Aceptar se mostrará la siguiente ventana:
Posteriormente se mostrará la ventana del resultado del cálculo del área
I.II.I. Objeto de control JLabel
Un objeto de control Jlabel permite dibujar en el formulario una
etiqueta, entendiéndose como etiqueta una expresión estática que se
quiere colocar.También es usado para mostrar los resultados de un
proceso.
Este componente se utiliza para desplegar textos o mensajes estéticos
dentrode las formas,textostalescomoencabezados,solicitudal usuario
del programa para que proporcione algún dato o información (edad,
dame sueldo, etc.), en cierta forma hace las funciones de printf, cout,
writeln,print,display,etc.,perosolocuandose consideranensuparte de
mensajes.
También es un objeto en java y por tanto tiene asociados sus propias
propiedadesy objetos-eventos,al mismo tiempo como se está usando
dentro del objeto FRAME, muchas propiedades que se definan para el
objeto FRAME, el objeto Label las va a heredar. Es la propiedad TEXT, la
que lleva el contenido del mensaje que se quiere desplegar, misma que
se cargara de manera igual que con FRAME, es decir
LABEL.setPROPIEDAD(parámetros, en muchos de los casos;
Propiedades más usadas:
12. Background(), Border(), Bounds(), Cursor(), Enabled(), Font(),
Foreground(), Name(), Opaque(), Text(), ToolTipText(), Visible()
Text: Contiene el valor que se visualizará en el formulario.
Font: Permite establecer el tipo de letra de la expresión a mostrar en el
formulario.
Border: Para establecer el tipo de borde de la etiqueta.
Enabled: Para habilitar o inhabilitar el uso del objeto de control.
Recordar que las propiedades se inicializan y se usan en código con
.SETpropiedad. Algunos de sus escuchadores con sus métodos mas
importantes son:
WINDOW: WindowActivated(), WindowClosed(), WindowClosing(),
WindowDeactivated(), WindowOpened().
MOUSE: MouseClicked(), MouseDragged(),MouseEntered(),
MouseExited(), MouseMoved(), MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped().
I.II.II. Objeto de control JTextField
Un objeto de control JTextFieldpermite dibujar en el formulario un
cuadrode texto,esdecir,unacajaque permitelaintroducciónde undato
o valor.Este objeto es utilizado para el ingreso de datos.
EnJavaeste componenteesunimportante componentevisual,sufunción
principal esmanejartodoslosprocesosdeentradaysalida(input/output)
al programa. Su principal propiedad es TEXT(), que es la propiedad que
contiene el dato de tipo STRING que se manipulara en los programas o
aplicaciones.
El dato dentrode estapropiedadesde tipoSTRINGy por tanto se tendrá
que convertira datos numéricosnormalesparapoder efectuarprocesos
numéricos con ellos como se vio en el JAVA TEMA de CAST y
CONVERSIONES.
Aparte de esta propiedad TEXT, tiene otras propiedades que se pueden
inicializarconel comandoSETcomo ya se ha vistoenlosJAVA TEMA s de
FRAME y LABEL.
Propiedades más usadas:
Background(), Border(), Bounds(),Columns(), Cursor(),Editable(),
Enabled(), Font(), Foreground(),Name(),Opaque(), Text(),ToolTipText(),
Visible()
● Text: Contiene el valor o dato introducido en el cuadro de texto.
13. ● Font requestFocus()::Permite establecerel tipode letradel textoenla
caja.
● Border: Para establecer el tipo de borde del cuadro de texto.
● Enabled: Para habilitar o inhabilitar el uso del objeto de control.
Métodos más usados:
Recordar que las propiedades se inicializan y se usan en codigo con
.SETpropiedad.
WINDOW: WindowActivated(), WindowClosed(), WindowClosing(),
WindowDeactivated(), WindowOpened().
MOUSE: MouseClicked(), MouseDragged(),MouseEntered(),
MouseExited(), MouseMoved(), MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped().
getText(): Permite obtener el texto introducido en el cuadro de texto.
setText(): Permite colocar un texto en el objeto JTextField.
permite asignar el cursor al objeto de control.
I.II.III. Objeto de control JButton
Un objeto de control JButton permite dibujar en el formulario un
objeto que contiene un proceso a ejecutar. Se utiliza comúnmente para
llevar a cabo procesos específicos según la naturaleza de la aplicación.
En javaesel control principal de laforma,contieneel códigoprincipaldel
programa y su activación por el usuario provoca que se realicen los
principalesprocesosdel problemaplanteado(aquíesdonde se capturan
datos, se realizan operaciones, etc.). De este control se maneja su
propiedadTEXTparaetiquetarloconlapalabra“OK”o“ACEPTAR”o“EXE”
y sueventoClick paraactivarlo,esendichoeventodonde se construyeel
código del programa.
Propiedades más usadas:
Background(), Border(), Bounds(),Columns(), Cursor(),Editable(),
Enabled(), Font(), Foreground(),Name(),Opaque(), Text(),ToolTipText(),
Visible()
● Text: Contiene el valor o dato introducido en el cuadro de texto.
● Font: Permite establecer el tipo de letra del texto en la caja.
● Enabled: Para habilitar o inhabilitar el uso del objeto de control.
Evento más usado:
ActionPerformed: Este evento se lleva a cabo cuando el usuario da click
sobre el objeto de control JButton.
14. WINDOW: WindowActivated(), WindowClosed(), WindowClosing(),
WindowDeactivated(), WindowOpened().
MOUSE: MouseClicked(), MouseDragged(),MouseEntered(),
MouseExited(), MouseMoved(), MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped()
Una aplicación usando los objetos de control
Ahora procedamos a desarrollar la misma aplicación usando como
interfase un formulario y los objetos de control antes mencionado.
I.IV. Ejemplo:
Seleccionamos el paquete ejercicios y damos click botón derecho del
mouse y eligimos la opción New y posteriormente JframeForm.
Se muestra la ventana New JFrame Form y colocamos en Class Name el
nombre del formulario: frmAreaTriangulo.
15. En esta ventana se observa que la clase denominada frmAreaTriangulo
generaráun archivode extensión.javadenominadofrmAreaTrianguloque
se almacenará dentro de la carpeta ejercicios y pertenecerá al paquete
ejercicios.
Al momento de dar click en el botón de comando Finish se visualizará el
entorno de desarrollo NetBeansy al lado derecho se muestra la paleta de
los objetos de control (Swing Controls).
16. Sobre el diseñodel formulariodamosclickbotónderechoyseleccionamos
Set Layout y posteriormente AbsoluteLayout.
Es necesario usar AbsoluteLayout para que permita dibujar los objetosde
control en el lugar donde uno quiere en el formulario.
17. Ahora procedamos a colocar un objeto Jlabel seleccionando de la paleta
Swing Controls Label y lo arrastramos hacia el diseño del formulario
Continuamos el diseño del formulario, quedando éste de la siguiente
manera:
Ahora procedamos a usar a cambiar los valores de las propiedades de los
objetos de control en la ventana de propiedades:
18. Luego de aplicar los cambios en los valores de propiedades el diseñodel
formulario debe quedar de la siguiente manera:
Es necesariodarle un nombre propioa los objetosde control y sobre todo
a aquellosque intervienenenlalógicade laprogramación.Seleccionamos
el objeto de control JTextField1 y damos click con el botón derecho del
mouse y se visualizaráunmenúflotante yseleccionamos Change Variable
Name.
19. Colocamos como nombre al objeto JtextField1: txtBase
Continuamos con los objetos de control siguientes:
20. Ahora procedamos a programar en los botones de comando.
En el botón CALCULAR (btnCalcular) al darle doble click y escribir el
siguiente código: (lo escrito en azul)
private voidbtnCalcularActionPerformed(java.awt.event.ActionEventevt)
{
int base, altura;
double area;
base=Integer.parseInt(txtBase.getText());
altura=Integer.parseInt(txtAltura.getText());
area=base*altura/2;
txtArea.setText(String.valueOf(area));
}
Una vezdeclaradaslasvariablesde memoria,alavariable basese le asigna
el valor
Introducido en el cuadro de texto txtBase. El método getText() permite
obtenerel datointroducidoyconel método parseIntde laclase Integeres
convertido a numérico entero. Se hace lo mismo para la variable altura.
Para mostrar el cálculo de área se utiliza el método setText del cuadro de
texto txtArea que permite visualizar el contenido de la variable area. A la
variable se le aplica el método valueOf de la clase String para convertir el
dato área en cadena de caracteres.
el siguiente código: (lo escrito en azul)
private voidbtnLimpiarActionPerformed(java.awt.event.ActionEvent evt)
{
txtBase.setText("");
txtAltura.setText("");
txtArea.setText("");
txtBase.requestFocus();
}
Se limpian los cuadros de textos a través del método setText() y con el
método requestFocus() se pasa el cursor al objeto de control txtArea.
En el botón CERRAR (btnCerrar) luego de darle doble click, escribimos el
siguiente código: (lo escrito en azul)
private voidbtnCerrarActionPerformed(java.awt.event.ActionEvent evt)
{
dispose();
}
El método dispose() permite descargar el formulario y terminar la
ejecución de la aplicación.
21. ProcedemosaejecutarlaaplicaciónseleccionadofrmAreaTrianguloyal dar
clic botón derecho eligimos Run File
Se muestra el formulario diseñado en etapa de ejecución.
Podemosobservarque elformulariosaleconlosobjetosdecontrolcercano
a los bordesdel formularioyel mismoformulariose visualizapegado enla
parte superiorizquierdade la pantalladel computador.Vamosa proceder
a corregir estos defectos agregando dos líneas de código en el método
constructor de la clase frmAreaTriangulo. (escribe lo que está en azul)
public class frmAreaTriangulo extends javax.swing.JFrame
{
22. /** Creates new form frmAreaTriangulo */
public frmAreaTriangulo()
{
initComponents();
setSize(400,250);
setLocation(250,250);
}
El método setSize() permite establecer el tamaño del formulario y el
método setLocation() permite ubicar el formulario dentro de la pantalla.
Los métodos antes mencionados pertenecen al formulario
frmAreaTriabgulo. Otros métodos del formulario se verán más adelante.
Procedemos nuevamennte a ejecutar el formulariofrmAreaTriangulo y se
mostrará de la siguiente manera:
En el siguiente tema conoceremos más objetos de control y seguiremos
trabajando con lo aprendido en esta sesión o tema.
II. Resumen
Antes de la existencia de Swing, las interfaces gráficas con el usuariose realizaban a través
de AWT (Abstract Window Toolkit), de quien Swing hereda todo el manejo de eventos.
Usualmente, paratodacomponenteAWTexisteunacomponenteSwingquelareemplaza, por
ejemplo, la clase Buttonde AWT es reemplazada porla clase JButtonde Swing (el nombrede
todas las componentes Swing comienza con "J").
Las componentes de Swing utilizan la infraestructura de AWT, incluyendo el modelo de
eventosAWT, el cual rige cómounacomponentereacciona a eventostales como, eventosde
teclado, mouse, etc
23. III. Recomendaciones
• En la aplicación sólo debe haber un único JFrame, correspondiente a la
aplicación principal.
• Evita en lo posible los JDialog modales, o ten muy en cuenta su jerarquía de padres.
• Nunca heredes de JFrame o JDialog o JApplet para hacer tus ventanas.
• Respetar los pasos que se aplican en la clase swing.
• Es muy importante antes de programar definir o tener bien claro los procedimientos.
• Proporcionarcomponentesbásicosde GUI para utilizarlos,tantoen los applets comoen
las aplicaciones.
IV. Conclusiones
En conclusiónPodemosdecirque SwingeslaevolucióndelAWT (AbstractWindow
Toolkit).
El diseño en Java puro posee menos limitaciones de plataforma. El desarrollo de
componentes Swing es más activo. Los componentes de Swing soportan más
características.
A partir de AWT nace Swing con mejoras en aspectos visuales, portabilidad y
comportamiento.
V. Apreciación del equipo
Este trabajo está elaborado con un grupo de estudiantes de la carrera de
ingeniería de sistemas y telemática de TERCER CICLO de la universidad politécnica
Amazónica (UPA) con la finalidad de aprender algo nuevo descubriendo
habilidades en un mundo de la programación.
VI. Glosario de términos
JFC:Java Foundation Classes.
Layout: Cuadrícula imaginaria que divide en espacios o campos la página
que se diseña para facilitar la distribución de elementos como textos ó
gráficos en la misma.
Swing: es parte de la JFC en la plataforma Java.
AWT:Abstract Window Toolkit.
Plataforma: es un sistema que permite la ejecución de diversas
aplicaciones bajo un mismo entorno, dando a los usuarios la posibilidad de
acceder a ellas a través de Internet.