Вы находитесь на странице: 1из 42

ELT-753 INFORMATICA SUPERIOR I

PROGRAMACION VISUAL CON JAVA


PAQUETES PARA EL DESARROLLO GRAFICO
-

java.applet: Para crear applets y clases que las applets utilizan para comunicarse con
su contexto.
java.awt: Para crear interfaces con el usuario, y para dibujar imgenes y grficos.
javax.swing: Conjunto de componentes grficos que funcionan igual en todas las
plataformas que java soporta.
javax.accesibility: Da soporte a clases de accesibilidad para personas discapacitadas.
java.beans: Para el desarrollo de JavaBeans.

AWT y Swing
Java provee dos API's con las que podemos trabajar para desarrollar GUIs, la ms bsica es
AWT (Abstract Window Toolkit). Las ms desarrolladas se hacen con Swing, las cuales son
ms identificables ya que todas comienzan con "J", por ejemplo: JButton, JTextField, JTextArea,
JPanel y JFrame son clases de Swing.
En Java se pueden desarrollar interfaces grficas de mayor calidad y vistosidad a travs de la
biblioteca de clases AWT. Hemos de decir que la estructura bsica del AWT se basa en
componentes y contenedores. Los contenedores con tienen componentes, y estos ltimos no
son ms que elementos grficos bsicos. Los elementos grficos ms comunes que podemos
destacar son los botones, las barras de desplazamiento, etiquetas, listas, cajas de seleccin, o
campos de texto.
La interfaz del programa hacia el usuario que la utiliza es la manera en que el programa coge
los datos del usuario y le devuelve los resultados.
Hasta ahora vimos unas interfaces de texto, el caso de la suma de los nmeros en las que los
datos se cogan del input estndar con una System.in.read() y los resultados se impriman en el
output estndar con una System.out.print().

Las System.in y out representan una interfaz del programa hacia el exterior, en este caso, hacia
el usuario.
Por tanto, la interfaz est compuesta por todos los canales de los que un programa recoge
informaciones
y
hacia
las
que
devuelve
unos
resultados.
Algunos datos de entrada sirven para que cambie slo el estado del programa, otros, en
cambio, dan inmediatamente un output.
INTERFAZ GRAFICA GUI
Llamamos Interfaz Grfica GUI (Graphical User Interface) al conjunto de componentes grficos
que posibilitan la interaccin entre el usuario y la aplicacin. Es decir ventanas, botones,
combos, listas, cajas de dilogo, campos de texto, etc.
Primero tenemos que disear la aplicacin, programarla y por ltimo los eventos que se
generan a medida que el usuario interacta con la Interfaz.
Los componentes son objetos de las clases que heredan de la clase base componente como
Button, List, TextField, TextArea, Label, etc.
En una GUI los componentes son contenidos en Contenedores o containers. Un Container es
un objeto cuya clase hereda de Container(clase que a su vez es subclase de Component) y
tiene la responsabilidad de contener Componentes.

ELT-753 INFORMATICA SUPERIOR I

Generalmente una GUI se monta sobre un Frame. Est sera el Container principal que
contendr a los componentes de la Interfaz Grfica, un Container podra contener a otros
containers.
En nuestra explicacin de los componentes GUI analizaremos cmo definirlos, cmo
inicializarlos, cmo introducirlos en una ventana o en un aplique y, finalmente, cmo gestionar
los sucesos.
Qu ES UNA APLICACIN O VENTANA?
La aplicacin a ventanas es el tipo de aplicacin que ms a menudo utilizamos cuando
trabajamos con el ordenador. Por lo tanto veremos cmo se crea una Ventana usando el
paquete AWT.
Como siempre creamos una aplicacin con el main, como hicimos anteriormente. Sin embargo,
la clase que creamos ahora ampliar la clase java.awt.Frame, que representa la ventana
completa, incluye el ttulo, los pulsantes de reduccin a icono, maximizar y cerrar.
La clase Frame tiene varios mtodos y constructores que veremos dentro de poco. Ahora
vamos a crear nuestra primera ventana con el ttulo Primera Ventana y que no incluye nada. La
editamos en Ventana.java.
Ejemplo

import java.awt.*;
public class Ventana extends Frame
{
public Ventana()
{
super("Primera Ventana");
setLocation(100,100);
setSize(200,100);
show();
}

public static void main(String[] arg)


{
new Ventana();
System.out.println("he creado la ventana");
}
}
Al principio, como para cada aplicacin, se invoca el main que crea un nuevo objeto de tipo
Ventana. (El main y la ventana podran estar en dos archivos separados, uno que gestiona el
main, y el otro que gestiona la ventana).
En el constructor del objeto ventana se invoca al constructor de la superclase, es decir, del
frame, con la cadena "Primera Ventana" (es el ttulo). Luego se invoca el mtodo setLocation
que declara la posicin del ngulo derecho en la parte que est arriba de la ventana en el

ELT-753 INFORMATICA SUPERIOR I


escritorio, en este caso <100, 100> (Son la x y la y respectivamente. La x se mide partiendo del
lado izquierdo de la pantalla y aumenta a medida que se va hacia la derecha. La y se mide
partiendo de la parte superior de la pantalla y aumenta a medida que se va hacia abajo).
Despus se invoca el mtodo setSize que permite especificar anchura y altura. En nuestro
caso, tiene una anchura de 200 y una altura de 100. Finalmente se invoca el mtodo show() y a
continuacin aparece la ventana en la pantalla.

Las coordinadas de la pantalla no son las coordenadas cartesianas. realmente la y es


precisamente opuesta porque aumenta a medida de que se baja y disminuye a medida de que
se sube. ste es un problema que tiene no slo Java, sino que todos los lenguajes de
programacin y todas las bibliotecas para la grfica Raster. Se debe a razones histricas,
supongo, debidas a la forma de dibujar los pixel en pantalla a nivel de hardware. Hay que
acostumbrarse, pero las primeras veces puede provocar problemas de razonamiento.
Intentad redactar y poner en marcha el programa y cuando se ve vuestra primera ventana.
Sucesivamente elimina, por turnos, los mtodos setLocation, setSize y show, coloca tambin
las ventanas en distintas posiciones y evalua los cambios. En el ejemplo, se ven sucesos que
el sistema gestiona automticamente. Son Ir Resize de la Ventana y la presin de los
pulsadores reduce a iconos y maximiza (minimiza), los cuales se gestionan en la clase Frame.
En cambio, no se gestiona el suceso cerrar ventana (el pulsador de la x). Si se teclea no ocurre
nada y para acabar la puesta en marcha del programa hay que ir al prompt del DOS desde el
que empez la aplicacin y teclear CTRL+C (el exit para todos los programas DOS).
Adems no es verdad que a una aplicacin se puede asociar a una solo ventana. Java es un
lenguaje que permite la multiprogramacin. Cada ventana es un programa independiente que
trabaja contemporneamente con otros. Por eso puedo crear, para la misma aplicacin, ms
ventanas
Frame,
como
en
el
ejemplo
que
ofrecemos
a
continuacin.
Ejemplo 2.
import java.awt.*;
public class Ventanas extends Frame
{
public Ventanas(String Nombre, int x, int y)
{
super(Nombre);
setLocation(x,y);
setSize(200,100);
show();

ELT-753 INFORMATICA SUPERIOR I

}
public static void main(String[] arg)
{
System.out.println("Creo 4 ventanas solapadas");
for (int e=1;e<5;e++) new Ventanas("Ventana "+e,10+(e*10), 10+(e*10));
System.out.println("Creo 4 ventanas a cuadros");
for (int e=5;e<9;e++) new Ventanas("Ventana "+e,(e-5)*200, 100+(e-5));
System.out.println("He creado las ocho ventanas");
}
}
Las mismas cosas se podan hacer extendiendo la clase JFrame del paquete javax.swing.
import javax.swing.*;
public class VentanaSwing extends JFrame
{
public VentanaSwing()
{
super("Primera Ventana");
setLocation(100,100);
setSize(200,100);
show();
}

public static void main(String[] arg)


{
new VentanaSwing();
System.out.println("He creado la ventana con Swing");
}
}

Interfaces grficas con Swing


Swing es una biblioteca de interfaces grficas de usuario (GUI) para Java.
Viene incluida con el entorno de desarrollo de Java (JDK).
Extiende a otra librera grfica ms antigua llamada AWT.
Paquetes:
javax.swing

ELT-753 INFORMATICA SUPERIOR I


java.awt
java.awt.event
Ventanas
Componentes
Layout Managers
Manejo de eventos
Cuadros de dilogo predefinidos
Dibujo de grficos
Creacin de ventanas
La clase JFrame proporciona operaciones para manipular ventanas.
Constructores:
JFrame()
JFrame(String titulo)
Una vez creado el objeto de ventana, hay que:
Establecer su tamao.
Establecer la accin de cierre.
Hacerla visible.
EJEMPLO 1
import javax.swing.*;
public class VentanaTest {
public static void main(String[] args)
{
JFrame f = new JFrame("Titulo de ventana");
f.setSize(400, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Acciones de cierre:
JFrame.EXIT_ON_CLOSE: Abandona aplicacin.
JFrame.DISPOSE_ON_CLOSE: Libera los recursos asociados a la ventana.
JFrame.DO_NOTHING_ON_CLOSE: No hace nada.
JFrame.HIDE_ON_CLOSE: Cierra la ventana, sin liberar sus recursos.

EJEMPLO 2.
public class MiVentana extends JFrame {
public MiVentana() {
super("Titulo de ventana");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ELT-753 INFORMATICA SUPERIOR I


}
}
public class VentanaTest {
public static void main(String[] args) {
MiVentana v = new MiVentana();
v.setVisible(true);
}
}
PONER IMAGEN DE FONDO
Lo primero que debemos hacer es crear un proyecto Java nuevo : File New Java Proyect.
Le llamaremos ImangenDeFondo

Una vez creado el proyecto nos situamos sobre l en el PackageExplorer y creamos un nuevo
Package en el que guardaremos las imgenes para nuestros fondos: Pulsando botn derecho
sobre el paquete ImagenDeFondo New Package. Le llamaremos Imgenes.

Lo siguiente ser crear dentro del proyecto una nueva clase heredada de JPanel.

En esta clase redefinimos el mtodo paintComponent con la intencin de poder crear nuestros
propios JPanel personalizados con una imagen de fondo. A esta clase la llamaremos
PanelImagen y su cdigo ser el siguiente.
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;

ELT-753 INFORMATICA SUPERIOR I


public class PanelImagen extends javax.swing.JPanel {
public PanelImagen(){
this.setSize(400,280);
}

public void paintComponent (Graphics g){


Dimension tamanio = getSize();
ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/imagenes/Koala.jpg"));
g.drawImage(imagenFondo.getImage(),0,0,tamanio.width, tamanio.height, null);
setOpaque(false);
super.paintComponent(g);
}
}
En esta linea indicamos la ruta en la que se encuentra la imagen dentro de nuestro proyecto:
ImageIcon imagenFondo = new ImageIcon(getClass().getResource(/imagenes/Koala.jpg));
Ahora vamos a crear dentro de nuestro proyecto una nueva clase (New Other JFrame) en
la que utilizaremos el JPanel que hemos creado para aadir un fondo al JFrame, le llamaremos
JFrameConFondo.

Lo que haremos ser crear un objeto de la clase PanelImagen y lo definiremos como fondo del
JFrame.
El cdigo de esta clase ser el siguiente:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;

ELT-753 INFORMATICA SUPERIOR I


import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class JFrameConFondo extends JFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrameConFondo frame = new JFrameConFondo();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public JFrameConFondo() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
PanelImagen p = new PanelImagen();
p.setBorder(new EmptyBorder(5, 5, 5, 5));
p.setLayout(new BorderLayout(0, 0));
setContentPane(p);
}
}
Ahora nuestro JFrame tendr como fondo un bonito Koala.

ELT-753 INFORMATICA SUPERIOR I

COMPONENTES DE UNA VENTANA


Componentes de una ventana
JButton
JLabel
JTextField
JCheckBox
JRadioButton
Tras crear uno de estos componentes con new, ha de aadirse al contentPane de la ventana
correspondiente mediante su mtodo add.
Aadir componentes
EJEMPLO 3.
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener {
JButton boton1;
public Formulario() {
setLayout(null);
boton1=new JButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
System.exit(0);
}
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,450,350);
formulario1.setVisible(true);
}
}

ELT-753 INFORMATICA SUPERIOR I

La mecnica para atrapar el clic del objeto de la clase JButton se hace mediante la
implementacin de una interface. Una interface es un protocolo que permite la comunicacin
entre dos clases. Una interface contiene uno o ms cabecera de mtodos, pero no su
implementacin. Por ejemplo la interface ActionListener tiene la siguiente estructura:
interface ActionListener {
public void actionPerformed(ActionEvent e) {
}
Luego las clases que implementen la interface ActionListener debern especificar el algortmo
del mtodo actionPerformed.
Mediante el concepto de interfaces podemos hacer que desde la clase JButton se puede llamar
a un mtodo que implementamos en nuestra clase.
Para indicar que una clase implementar una interface lo hacemos en la declaracin de la clase
con la sintaxis:
public class Formulario extends JFrame implements ActionListener {
Con esto estamos diciendo que nuestra clase implementa la interface ActionListener, luego
estamos obligados a codificar el mtodo actionPerformed.
Definimos un objeto de la clase JButton:
JButton boton1;
En el constructor creamos el objeto de la clase JButton y mediante la llamada del mtodo
addActionListener le pasamos la referencia del objeto de la clase JButton utilizando la palabra
clave this (this almacena la direccin de memoria donde se almacena el objeto de la clase
JFrame, luego mediante dicha direccin podemos llamar al mtodo actionPerformed):
public Formulario() {
setLayout(null);
boton1=new JButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}
El mtodo actionPerformed (este mtodo de la interface ActionListener debe implementarse
obligatoriamente, en caso de no codificarlo o equivocarnos en su nombre aparecer un
mensaje de error en tiempo de compilacin de nuestro programa.

10

ELT-753 INFORMATICA SUPERIOR I


El mtodo actionPerformed se ejecutar cada vez que hagamos clic sobre el objeto de la clase
JButton.
La interface ActionListener y el objeto de la clase ActionEvent que llega como parmetro estn
definidos en el paquete:
import java.awt.event.*;
Es decir que cada vez que se presiona el botn desde la clase JButton se llama al mtodo
actionPerformed y recibe como parmetro un objeto de la clase ActionEvent.
En el mtodo actionPerformed mediante el acceso al mtodo getSource() del objeto que llega
como parmetro podemos analizar que botn se presion:
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
System.exit(0);
}
}
Si se presion el boton1 luego el if se verifica verdadero y por lo tanto llamando al mtodo exit
de la clase System se finaliza la ejecucin del programa.

LAYOUT MANAGERS
Todos los contenedores en java tienen en su interior una clase, de nombre genrico "layout",
que es la encargada de distribuir los botones dentro del contenedor. Por ejemplo, la
claseFlowLayout se encarga de hacer que los botones vayan todos seguidos de izquierda a
derecha, como sera el caso de tu barra de herramientas del navegador. El GridLayout los
coloca en forma de matriz, etc.
En Java no es habitual indicar explcitamente la posicin de los componentes de la interfaz
dentro de la ventana.
Los layout managers se encargan de colocar los componentes de la interfaz de usuario en la
ventana contenedora.
Especifican la posicin y el tamao de dichos componentes.
- FlowLayout
- GridLayout
- BorderLayout
- GridBagLayout
FlowLayout
Acomoda los componentes de izquierda a derecha, hasta que se acaba la pantalla y entonces
empieza en el siguiente renglon:
Mtodos:
setAligment(int alineacion)
setHgap(int separacion)
setVgap(int separacion)

11

ELT-753 INFORMATICA SUPERIOR I

GridLayout
El GridLayout dispone los componentes de un contenedor en una rejilla rectangular. El
contenedor se dividir en rectangulos iguales y en cada uno se colocar uno de los
componentes. A la hora de construir este layout debemos especificar el nmero de filas y
columnas que necesitamos para nuestros componentes, para ello usaremos el siguiente
constructor GridLayout(int rows, int cols) , adems si queremos controlar el espacio que existir
entre los componentes en el contenedor de manera similar a como hicimos con BorderLayout
podemos usar este otro: GridLayout(int rows, int cols, int hgap, int vgap).
GridLayout(int filas, int columnas)
Mtodos:
- setHgap(int separacion)
- setVgap(int separacion)
EJEMPLO 4.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DemoGridLayout extends JFrame implements ActionListener
{
private JButton botones[];
private final String nombres[] =
{ "uno", "dos", "tres", "cuatro", "cinco", "seis" };
private boolean alternar = true;
private Container contenedor;
private GridLayout cuadricula1, cuadricula2;
// configurar GUI
public DemoGridLayout()
{
super( "Demostracin de GridLayout" );
// establecer esquemas
cuadricula1 = new GridLayout( 2, 3, 10, 10 );
cuadricula2 = new GridLayout( 3, 2 );
// obtener panel de contenido y establecer su esquema
contenedor = getContentPane();
contenedor.setLayout( cuadricula1 );
// crear y agregar botones
botones = new JButton[ nombres.length ];
for ( int cuenta = 0; cuenta < nombres.length; cuenta++ ) {
botones[ cuenta ] = new JButton( nombres[ cuenta ] );

12

ELT-753 INFORMATICA SUPERIOR I


botones[ cuenta ].addActionListener( this );
botones[ cuenta ].setToolTipText("Cambia el esquema de
GridLayout");
contenedor.add( botones[ cuenta ] );
}
setSize( 300, 150 );
setVisible( true );
} // fin del constructor de DemoGridLayout
// manejar eventos de botn, alternando entre los esquemas
public void actionPerformed( ActionEvent evento )
{
if ( alternar )
contenedor.setLayout( cuadricula2 );
else
contenedor.setLayout( cuadricula1 );
alternar = !alternar;

// establecer alternar en el valor

opuesto

contenedor.validate();

}
public static void main( String args[] )
{
DemoGridLayout aplicacion = new DemoGridLayout();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase DemoGridLayout

BorderLayout
Arregla los componentes en posiciones CENTER, NORTH, SOUTH, EAST, WEST.
Mtodos:
setHgap(int separacion)
setVgap(int separacion)
Al aadir un elemento a la ventana, hay que especificar su colocacin:
JButton b = new JButton(...);
getContentPane().add(b, BorderLayout.EAST)

EJEMPLO 5.
import java.lang.*;

13

ELT-753 INFORMATICA SUPERIOR I


import java.awt.*;
import java.awt.event.*;
public class Prog4 {
//declaracion, creacion e inicializacion de componentes, objetos y
variables
static Frame ventana= new Frame();
static Label l1 = new Label("norte");
static Label l2 = new Label("sur");
static Label l3 = new Label("este");
static Label l4 = new Label("oeste");
static Button b1 = new Button("CENTRO");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setLayout(new BorderLayout());
ventana.add(l1,BorderLayout.NORTH);
ventana.add(l2,BorderLayout.SOUTH);
ventana.add(l3,BorderLayout.EAST);
ventana.add(l4,BorderLayout.WEST);
ventana.add(b1,BorderLayout.CENTER);
ventana.pack();
ventana.setVisible(true);
//area de asociacion de objeto-eventos
ventana.addWindowListener( new WindowAdapter()
{ public void windowClosing(WindowEvent e){ System.exit(0); }} );
}; // termina main
} // termina clase

14

ELT-753 INFORMATICA SUPERIOR I

Interfaces
Manejo de eventos
Un evento es un suceso que ocurre como consecuencia de la interaccin del usuario con
la interfaz grfica.
Pulsacin de un botn.
Cambio del contenido en un cuadro de texto.
Deslizamiento de una barra.
Activacin de un JCheckBox.
Movimiento de la ventana.
Pulsacin de un botn
La clase JButton tiene un mtodo:
void addActionListener(ActionListener l)
Que especifica el objeto (manejador de evento) que se encargar de tratar el evento de
pulsacin del botn.
Este objeto ha de interpretar la interfaz
ActionListener (paquete java.awt.event)
public interface ActionListener {
void actionPerformed(ActionEvent e)
}
Cuando el usuario pulse el botn, se llamar al
mtodo actionPerformed de todos los
manejadores de eventos que se hayan
registrado.
public class Manejador implements ActionListener {
public void actionPerformed(ActionEvent e) {
...
}
}
Mtodos de ActionEvent:
public Object getSource()
public int getModifiers()
EJEMPLO 6.
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener {
JButton boton1;
public Formulario() {

15

ELT-753 INFORMATICA SUPERIOR I


setLayout(null);
boton1=new JButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
System.exit(0);
}
}

public static void main(String[] ar) {


Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,450,350);
formulario1.setVisible(true);
}

Mtodos y constructores
Hay que destacar los mtodos y constructores ms relevantes que nos permitirn configurar los
componentes segn nuestras necesidades.
-Contenido del botn

16

ELT-753 INFORMATICA SUPERIOR I

Ajustes sobre la apariencia del botn

17

ELT-753 INFORMATICA SUPERIOR I


Funcionalidad del botn

EJEMPLO 7.
En este ejemplo igual que en los dems se va a crear una pequea aplicacin que nos muestre
una iniciacin a como crear el correspondiente componente.
Vamos a crear dos objetos JButton y demostramos que soportan el despliegue de objetos Icon.
El manejo de eventos se lleva a cabo mediante una sola instancia de la clase interna
ManejadorBoton.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaBoton extends JFrame {
private JButton botonSimple, botonElegante;
public PruebaBoton()
{
super( "Prueba de botones" );
Container c = getContentPane();
c.setLayout( new FlowLayout() );
// crea los botones
botonSimple = new JButton( "Boton simple" );
//agregamos el boton al panel de contenido
c.add( botonSimple );
//creamos dos objetos ImageIcon que representan al
//objeto Icon predeterminado y al objeto Icon de
//sustitucion para el botonElegante.
//los gif se presupone que estan en el mismo
//directorio que la aplicacin que las utiliza
Icon icono1 = new ImageIcon( "icono1.gif" );
Icon icono2 = new ImageIcon( "icono2.gif" );
//crea el boton con el gif y el texto (texto a la
//derecha del icono como predeterminado)
botonElegante = new JButton("Boton elegante",icono1);
//se utiliza el metodo setRollOverIcon heredado de
//AbstractButton para especificar la imagen que
//aparece cuando el raton se posiciona sobre el boton
botonElegante.setRolloverIcon( icono2 );

18

ELT-753 INFORMATICA SUPERIOR I


//agregamos el boton al panel de contenido
c.add( botonElegante );
// crea una instancia de la clase interna
//anejadorBoton para usarla en el manejo de eventos
//de botn
ManejadorBoton manejador = new ManejadorBoton();
botonElegante.addActionListener( manejador );
botonSimple.addActionListener( manejador );
setSize( 300, 100 );
show();
} // fin del constructor de PruebaBoton
public static void main( String args[] )
{
PruebaBoton ap = new PruebaBoton();
ap.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
} // fin del mtodo windowClosing
} // fin de la clase interna annima
); // fin de addWindowListener
} // fin de main
// clase interna para el manejo de eventos de botn
private class ManejadorBoton implements ActionListener {
public void actionPerformed( ActionEvent e )
{
//mostramos un cuadro de dialogo de mensaje que contiene la
//etiqueta del boton que se pulso
JOptionPane.showMessageDialog( null,
"Usted oprimio:" + e.getActionCommand() );
}
}
}

EJERCICIOS
1. Disponer dos objetos de la clase JButton con las etiquetas: "varn" y "mujer", al presionarse
mostrar en mensaje del botn presionado.

JCheckBox
El componente JCheckBox nos provee de un simple dispositivo de encedido/apagado con una
etiqueta de texto a un lado. Veamos el siguiente ejemplo:
EJEMPLO 1:
Confeccionar un programa que muestre 3 objetos de la clase JCheckBox con etiquetas de tres
idiomas. Cuando se lo selecciona mostrar en el ttulo del JFrame todos los JCheckBox
seleccionados hasta el momento.

19

ELT-753 INFORMATICA SUPERIOR I

import javax.swing.*;
import javax.swing.event.*;
public class FormularioCheck extends JFrame implements ChangeListener{
private JCheckBox check1,check2,check3;
public FormularioCheck() {
setLayout(null);
check1=new JCheckBox("Ingls");
check1.setBounds(10,10,150,30);
check1.addChangeListener(this);
add(check1);
check2=new JCheckBox("Francs");
check2.setBounds(10,50,150,30);
check2.addChangeListener(this);
add(check2);

check3=new JCheckBox("Alemn");
check3.setBounds(10,90,150,30);
check3.addChangeListener(this);
add(check3);

public void stateChanged(ChangeEvent e){


String cad="";
if (check1.isSelected()==true) {
cad=cad+"Ingls-";
}
if (check2.isSelected()==true) {
cad=cad+"Francs-";
}
if (check3.isSelected()==true) {
cad=cad+"Alemn-";
}
setTitle(cad);
}

public static void main(String[] ar) {


FormularioCheck formulario1=new FormularioCheck();
formulario1.setBounds(0,0,300,200);
formulario1.setVisible(true);
}

Lo primero y ms importante que tenemos que notar que para capturar el cambio de estado del
JCheckBox hay que implementar la interface ChangeListener que se encuentra en el paquete:
import javax.swing.event.*;
y no en el paquete:
import java.awt.event.*
Cuando declaramos la clase JFrame indicamos que implementaremos la interface
ChangeListener:
public class Formulario extends JFrame implements ChangeListener{
Definimos tres objetos de la clase JCheckBox:
private JCheckBox check1,check2,check3;
En el constructor creamos cada uno de los objetos de la clase JCheckBox y llamamos al
mtodo addChangeListener indicando quien procesar el evento de cambio de estado:

20

ELT-753 INFORMATICA SUPERIOR I


check1=new JCheckBox("Ingls");
check1.setBounds(10,10,150,30);
check1.addChangeListener(this);
add(check1);
El mtodo que debemos implementar de la interface ChangeListener es:
public void stateChanged(ChangeEvent e){
En este mediante tres if verificamos el estado de cada JCheckBox y concatenamos los String
con los idiomas seleccionados:
String cad="";
if (check1.isSelected()==true) {
cad=cad+"Ingls-";
}
if (check2.isSelected()==true) {
cad=cad+"Francs-";
}
if (check3.isSelected()==true) {
cad=cad+"Alemn-";
}
setTitle(cad);
La seleccin o deseleccion de un JCheckBox es enviada a la interface ItemListener. El
ItemEvent es enviado conteniendo el mtodo getStatedChange(), el cual regresa
ItemEvent.DESELECTED o un ItemEvent.SELECTED, segn se el caso.
EJEMPLO 2.
Disponer un control JLabel que muestre el siguiente mensaje: "Esta de acuerdo con las normas
del servicio?", luego un JCheckBox y finalmente un objeto de tipo JButton desactivo. Cuando
se tilde el JCheckBox debemos activar el botn.
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
public class FormularioCheck2 extends JFrame implements
ActionListener, ChangeListener{
private JLabel label1;
private JCheckBox check1;
private JButton boton1;
public FormularioCheck2() {
setLayout(null);
label1=new JLabel("Esta de acuerdo con las normas del
servicio?");
label1.setBounds(10,10,400,30);
add(label1);
check1=new JCheckBox("Acepto");
check1.setBounds(10,50,100,30);
check1.addChangeListener(this);
add(check1);
boton1=new JButton("Continuar");
boton1.setBounds(10,100,100,30);
add(boton1);
boton1.addActionListener(this);
boton1.setEnabled(false);
}
public void stateChanged(ChangeEvent e) {
if (check1.isSelected()==true) {
boton1.setEnabled(true);
} else {

21

ELT-753 INFORMATICA SUPERIOR I


boton1.setEnabled(false);
}

public void actionPerformed(ActionEvent e) {


if (e.getSource()==boton1) {
System.exit(0);
}
}

public static void main(String[] ar) {


FormularioCheck2 formulario1=new FormularioCheck2();
formulario1.setBounds(0,0,350,200);
formulario1.setVisible(true);
}

Importamos los paquetes donde se encuentran las interfaces para captura de eventos de
objetos de tipo JButton y JCheckBox:
import javax.swing.event.*;
import java.awt.event.*;
Tambin importamos el paquete donde estn definidas las clase JFrame, JButton y JCheckBox:
import javax.swing.*;
Como debemos implementar dos interfaces las debemos enumerar despus de la palabra
implements separadas por coma:
public class Formulario extends JFrame implements ActionListener, ChangeListener{
Definimos los tres objetos:
private JLabel label1;
private JCheckBox check1;
private JButton boton1;
En el constructor creamos el objeto de tipo JLabel:
public Formulario() {
setLayout(null);
label1=new JLabel("Esta de acuerdo con las normas del servicio?");
label1.setBounds(10,10,400,30);
add(label1);
El objeto de tipo JCheckBox:
check1=new JCheckBox("Acepto");

22

ELT-753 INFORMATICA SUPERIOR I


check1.setBounds(10,50,100,30);
check1.addChangeListener(this);
add(check1);
y tambin creamos el objeto de tipo JButton y llamando al mtodo setEnabled con un valor
false luego el botn aparece desactivo:
boton1=new JButton("Continuar");
boton1.setBounds(10,100,100,30);
add(boton1);
boton1.addActionListener(this);
boton1.setEnabled(false);
Cuando se cambia el estado del control JCheckBox se ejecuta el mtodo stateChanged donde
verificamos si est seleccionado procediendo a activar el botn en caso negativo lo
desactivamos:
public void stateChanged(ChangeEvent e) {
if (check1.isSelected()==true) {
boton1.setEnabled(true);
} else {
boton1.setEnabled(false);
}
}
El mtodo actionPerformed se ejecuta cuando se presiona el objeto de tipo JButton (debe estar
activo para poder presionarlo):
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
System.exit(0);
}
}
3.5.1 Mtodos y constructores

23

ELT-753 INFORMATICA SUPERIOR I

JRadioButton
Los Botones de Radio son grupos de botones en los que, por convencin, slo uno de ellos
puede estar seleccionado. Swing soporta botones de radio con las clases JRadioButton y
ButtonGroup.
Para poner un botn de radio en un men, se utiliza la clase JRadioButtonMenuItem. Otras
formas de presentar una entre varias opciones son los combo boxes y las listas.
Como JRadioButton desciende de AbstractButton, los botones de radio Swing tienen todas las
caractersitcas de los botones normales.Los mtodos de AbstractButton que ms se utilizan son
setMnemonic, addItemListener, setSelected, y isSelected.
Para cada grupo de botones de radio, se necesita crear un ejemplar de ButtonGroup y aadirle
cada uno de los botones de radio. El ButtonGroup tiene cuidado de desactivar la seleccin
anterior cuando el usuario selecciona otro botn del grupo.
Generalmente se debera inicializar un grupo de botones de radio para que uno de ellos est
seleccionado. Sin embargo, la API no fuerza esta regla un grupo de botones de radio puede no
tener seleccin inicial. Una vez que el usuario hace una seleccin, no existe forma para
desactivar todos los botones de nuevo.
Cada vez que el usuario pulsa un botn de radio, (incluso si ya estaba seleccionado), el botn
dispara un evento action. Tambin ocurren uno o dos eventos tem: uno desde el botn que
acaba de ser seleccionado, y otro desde el botn que ha perdido la seleccin (si exista).
Normalmente, las pulsaciones de los botones de radio se manejan utilizando un oyente de
action.
Mtodos y constructores
-

ButtonGroups

RadioButton

EJEMPLO 1.
Confeccionar un programa que muestre 3 objetos de la clase JRadioButton que permitan
configurar el ancho y alto del JFrame.
import javax.swing.*;
import javax.swing.event.*;
public class FormularioRadio1 extends JFrame implements
ChangeListener{
private JRadioButton radio1,radio2,radio3;
private ButtonGroup bg;
public FormularioRadio1() {
setLayout(null);
bg=new ButtonGroup();
radio1=new JRadioButton("640*480");
radio1.setBounds(10,20,100,30);

24

ELT-753 INFORMATICA SUPERIOR I


radio1.addChangeListener(this);
add(radio1);
bg.add(radio1);
radio2=new JRadioButton("800*600");
radio2.setBounds(10,70,100,30);
radio2.addChangeListener(this);
add(radio2);
bg.add(radio2);
radio3=new JRadioButton("1024*768");
radio3.setBounds(10,120,100,30);
radio3.addChangeListener(this);
add(radio3);
bg.add(radio3);
}
public void stateChanged(ChangeEvent e) {
if (radio1.isSelected()) {
setSize(640,480);
}
if (radio2.isSelected()) {
setSize(800,600);
}
if (radio3.isSelected()) {
setSize(1024,768);
}
}
public static void main(String[] ar) {
FormularioRadio1 formulario1=new FormularioRadio1();
formulario1.setBounds(0,0,350,230);
formulario1.setVisible(true);
}
}
Importamos los dos paquetes donde estn definidas las clases e interfaces para la captura de
eventos:
import javax.swing.*;
import javax.swing.event.*;
Heredamos de la clase JFrame e implementamos la interface ChangeListener para capturar el
cambio de seleccin de objeto de tipo JRadioButton:
public class Formulario extends JFrame implements ChangeListener{
Definimos tres objetos de la clase JRadioButton y uno de tipo ButtonGroup:
private JRadioButton radio1,radio2,radio3;
private ButtonGroup bg;
En el constructor creamos primero el objeto de la clase ButtonGroup:
bg=new ButtonGroup();
Creamos seguidamente el objeto de la clase JRadioButton, definimos su ubicacin, llamamos
al mtodo addChangeListener para informar que objeto capturar el evento y finalmente
aadimos el objeto JRadioButton al JFrame y al ButtonGroup:

25

ELT-753 INFORMATICA SUPERIOR I


radio1=new JRadioButton("640*480");
radio1.setBounds(10,20,100,30);
radio1.addChangeListener(this);
add(radio1);
bg.add(radio1);
Exactamente hacemos lo mismo con los otros dos JRadioButton:
radio2=new JRadioButton("800*600");
radio2.setBounds(10,70,100,30);
radio2.addChangeListener(this);
add(radio2);
bg.add(radio2);
radio3=new JRadioButton("1024*768");
radio3.setBounds(10,120,100,30);
radio3.addChangeListener(this);
add(radio3);
bg.add(radio3);
En el mtodo stateChanged verificamos cual de los tres JRadioButton est seleccionado y
procedemos a redimensionar el JFrame:
public void stateChanged(ChangeEvent e) {
if (radio1.isSelected()) {
setSize(640,480);
}
if (radio2.isSelected()) {
setSize(800,600);
}
if (radio3.isSelected()) {
setSize(1024,768);
}
}

JLABEL
26

ELT-753 INFORMATICA SUPERIOR I


Los JLabel son textos que podemos colocar en un Frame, pero adems de textos podemos
colocar imagenes (animadas o no) para darle una buena presentacin a nuestra ventana.
La clase JLabel nos permite mostrar bsicamente un texto.
Primero para crear un JLabel necesitamos importar la Clase necesaria para eso:
import javax.swing.JLabel;
Ahora por orden y para que se vea bien crearemos un mtodo para cada JLabel que queremos
introducir a nuestro frame de manera tal que sea ms fcil su ubicacin y posterior
modificacin.

EJEMPLO 1.
Confeccionar una ventana que muestre el nombre de un programa en la parte superior y su
nmero de versin en la parte inferior. No permitir modificar el tamao de la ventana en tiempo
de ejecucin.
import javax.swing.*;
public class Formulario extends JFrame {
private JLabel label1,label2;
public Formulario() {
setLayout(null);
label1=new JLabel("Sistema de Facturacin.");
label1.setBounds(10,20,300,30);
add(label1);
label2=new JLabel("Vesion 1.0");
label2.setBounds(10,100,100,30);
add(label2);
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,300,200);
formulario1.setResizable(false);
formulario1.setVisible(true);
}

Importamos el paquete javax.swing donde se encuentran definidas las clase JFrame y JLabel:
import javax.swing.*;
Heredamos de la clase de JFrame:
public class Formulario extends JFrame {
Definimos dos atributos de la clase JLabel:
private JLabel label1,label2;
En el constructor creamos las dos JLabel y las ubicamos llamando al mtodo setBounds, no
hay que olvidar de llamar al mtodo add que aade la JLabel al JFrame:

27

ELT-753 INFORMATICA SUPERIOR I


public Formulario() {
setLayout(null);
label1=new JLabel("Sistema de Facturacin.");
label1.setBounds(10,20,300,30);
add(label1);
label2=new JLabel("Vesion 1.0");
label2.setBounds(10,100,100,30);
add(label2);
}
Por ltimo en la main creamos un objeto de la clase que acabamos de codificar, llamamos al
setBounds para ubicar y dar tamao al JFrame, llamamos al mtodo setResizable pasando el
valor false para no permitir modificar el tamao del JFrame en tiempo de ejecucin y finalmente
llamamos al mtodo setVisible para que se visualice el JFrame:
public static void main(String[] ar)
{
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,300,200);
formulario1.setResizable(false);
formulario1.setVisible(true);
}

EJERCICIOS
1. Disponer tres objetos de la clase JCheckBox con nombres de navegadores web. Cuando se
presione un botn mostrar en el ttulo del JFrame los programas seleccionados.
2. Crear tres objetos de la clase JLabel, ubicarlos uno debajo de otro y mostrar nombres de
colores.

JTEXTFIELD (Cuadros de Texto)


Un campo de texto es un control bsico que permite al usuario teclear una pequea cantidad
de texto y dispara un evento action cuando el usuario indique que la entrada de texto se ha
completado (normalmente pulsando Return). Generalmente se usa la clase JTextField para
proporcionar campos de texto.
Si necesitamos proporcionar un password field -- un campo de texto editable que no muestra
los caracteres tecleados por el usuario -- utilizaremos la clase JPasswordField. Esta seccin
explica estos dos campos de texto.

28

ELT-753 INFORMATICA SUPERIOR I


As como podramos decir que el control JLabel remplaza a la salida estndar System.out.print,
el control JTextField cumple la funcin de la clase Scanner para la entrada de datos.
El control JTextField permite al operador del programa ingresar una cadena de caracteres por
teclado.
EJEMPLO 1:
Confeccionar un programa que permita ingresar el nombre de usuario y cuando se presione un
botn mostrar el valor ingresado en la barra de ttulos del JFrame.
import javax.swing.*;
import java.awt.event.*;
public class FormularioText1 extends JFrame implements ActionListener{
private JTextField textfield1;
private JLabel label1;
private JButton boton1;
public FormularioText1() {
setLayout(null);
label1=new JLabel("Usuario:");
label1.setBounds(10,10,100,30);
add(label1);
textfield1=new JTextField();
textfield1.setBounds(120,10,150,20);
add(textfield1);
boton1=new JButton("Aceptar");
boton1.setBounds(10,80,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
String cad=textfield1.getText();
setTitle(cad);
}
}
public static void main(String[] ar) {
FormularioText1 formulario1=new FormularioText1();
formulario1.setBounds(0,0,300,150);
formulario1.setVisible(true);
}
}
Definimos los tres objetos que colaboran con nuestra aplicacin:
public class FormularioText1 extends JFrame implements ActionListener{
private JTextField textfield1;
private JLabel label1;
private JButton boton1;
En el constructor creamos los tres objetos y los ubicamos:
public FormularioText1() {

29

ELT-753 INFORMATICA SUPERIOR I


setLayout(null);
label1=new JLabel("Usuario:");
label1.setBounds(10,10,100,30);
add(label1);
textfield1=new JTextField();
textfield1.setBounds(120,10,150,20);
add(textfield1);
boton1=new JButton("Aceptar");
boton1.setBounds(10,80,100,30);
add(boton1);
boton1.addActionListener(this);
}
En el mtodo actionPerformed se verifica si se presion el objeto JButton, en caso afirmativo
extraemos el contenido del control JTextField mediante el mtodo getText:
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
String cad=textfield1.getText();
setTitle(cad);
}
}
En la variable auxiliar cad almacenamos temporalmente el contenido del JTextField y
seguidamente actualizamos el ttulo del control JFrame.
EJEMPLO 2:
Realizar un programa que permita ingresar dos nmeros en controles de tipo JTextField, luego
sumar los dos valores ingresados y mostrar la suma en la barra del ttulo del control JFrame.
import javax.swing.*;
import java.awt.event.*;
public class FormularioSuma extends JFrame implements ActionListener{
private JTextField textfield1,textfield2;
private JButton boton1;
public FormularioSuma() {
setLayout(null);
textfield1=new JTextField();
textfield1.setBounds(10,10,100,30);
add(textfield1);
textfield2=new JTextField();
textfield2.setBounds(10,50,100,30);
add(textfield2);

30

ELT-753 INFORMATICA SUPERIOR I

boton1=new JButton("Sumar");
boton1.setBounds(10,90,100,30);
add(boton1);
boton1.addActionListener(this);

public void actionPerformed(ActionEvent e) {


if (e.getSource()==boton1) {
String cad1=textfield1.getText();
String cad2=textfield2.getText();
int x1=Integer.parseInt(cad1);
int x2=Integer.parseInt(cad2);
int suma=x1+x2;
String total=String.valueOf(suma);
setTitle(total);
}
}
public static void main(String[] ar) {
FormularioSuma formulario1=new FormularioSuma();
formulario1.setBounds(0,0,140,150);
formulario1.setVisible(true);
}
}
Definimos los tres objetos:
public class Formulario extends JFrame implements ActionListener{
private JTextField textfield1,textfield2;
private JButton boton1;
En el mtodo actionPerformed es donde debemos sumar los valores ingresados en los
controles de tipo JTextField. Para extraer el contenido de los controles debemos extraerlos con
el mtodo getText:
String cad1=textfield1.getText();
String cad2=textfield2.getText();
Como debemos sumar numricamente los valores ingresados debemos convertir el contenido
de las variables cad2 y cad2 a tipo de dato int:
int x1=Integer.parseInt(cad1);
int x2=Integer.parseInt(cad2);
El mtodo parseInt de la clase Integer retorna el contenido de cad1 convertido a int (provoca un
error si ingresamos caracteres en el control JTextField en lugar de nmeros)
Una vez que tenemos los dos valores en formato numrico procedemos a sumarlos y
almacenar el resultado en otra variable auxiliar:
int suma=x1+x2;

31

ELT-753 INFORMATICA SUPERIOR I


Ahora tenemos que mostrar el valor almacenado en suma en la barra de ttulos del control
JFrame, pero como el mtodo setTitle requiere un String como parmetro debemos convertirlo
a tipo String:
String total=String.valueOf(suma);
setTitle(total);
Como veremos de ac en adelante es muy comn la necesidad de convertir String a enteros y
enteros a String:
De String a int:
int x1=Integer.parseInt(cad1);
De int a String:
String total=String.valueOf(suma);
EJERCICIO
1. Realizar un programa que permita ingresar dos nmeros en controles de tipo JTextField,
luego multiplicar los dos valores ingresados y mostrar la suma en la barra del ttulo del control
JFrame.

JTEXTAREA
JTextArea es un control para pedir varias lneas de texto, que a diferencia de JTextField, visto
en el artculo anterior, slo nos permita ingresar una lnea de texto.
El mtodo setText, muestra el texto en el control JTextArea.
Indicar que si deseamos capturar el texto ingresado en un control JTextArea se puede usar el
mtodo getText, igual que para el control JTextField. Se utiliza de la siguiente manera:
String s = jtextarea.getText().
String s = jtexfield.getText().
EJEMPLO 1.
Confeccionar un programa que permita ingresar un mail en un control de tipo JTextField y el
cuerpo del mail en un control de tipo JTextArea.
import javax.swing.*;
public class FormularioTextarea extends JFrame{
private JTextField textfield1;
private JTextArea textarea1;
public FormularioTextarea() {
setLayout(null);
textfield1=new JTextField();

32

ELT-753 INFORMATICA SUPERIOR I


textfield1.setBounds(10,10,200,30);
add(textfield1);
textarea1=new JTextArea();
textarea1.setBounds(10,50,400,300);
add(textarea1);
}
public static void main(String[] ar) {
FormularioTextarea formulario1=new FormularioTextarea();
formulario1.setBounds(0,0,540,400);
formulario1.setVisible(true);
}
}
Como vemos crear un control de tipo JTextArea es similar a la creacin de controles de tipo
JTextField:
textarea1=new JTextArea();
textarea1.setBounds(10,50,400,300);
add(textarea1);
El inconveniente que tiene este control es que si ingresamos ms texto que el que puede
visualizar no aparecen las barras de scroll y no podemos ver los caracteres tipeados.
Para salvar el problema anterior debemos crear un objeto de la clase JScrollPane y aadir en
su interior el objeto de la clase JTextArea, luego el programa definitivo es el siguiente:
import javax.swing.*;
public class FormularioTextarea2 extends JFrame{
private JTextField textfield1;
private JScrollPane scrollpane1;
private JTextArea textarea1;
public FormularioTextarea2() {
setLayout(null);
textfield1=new JTextField();
textfield1.setBounds(10,10,200,30);
add(textfield1);
textarea1=new JTextArea();
scrollpane1=new JScrollPane(textarea1);
scrollpane1.setBounds(10,50,400,300);
add(scrollpane1);
}
public static void main(String[] ar) {
FormularioTextarea2 formulario1=new FormularioTextarea2();
formulario1.setBounds(0,0,540,400);
formulario1.setVisible(true);
}
}
Declaramos los dos objetos:

33

ELT-753 INFORMATICA SUPERIOR I


private JScrollPane scrollpane1;
private JTextArea textarea1;
Primero creamos el objeto de la clase JTextArea:
textarea1=new JTextArea();
Seguidamente creamos el objeto de la clase JScrollPane y le pasamos como parmetro el
objeto de la clase JTextArea:
scrollpane1=new JScrollPane(textarea1);
Definimos la posicin y tamao del control de tipo JScrollPane (y no del control JTextArea):
scrollpane1.setBounds(10,50,400,300);
Finalmente aadimos el control de tipo JScrollPane al JFrame:
add(scrollpane1);
EJEMPLO 2.
Confeccionar un programa que permita ingresar en un control de tipo JTextArea una carta.
Luego al presionar un botn mostrar un mensaje si la carta contiene el String "argentina".
import javax.swing.*;
import java.awt.event.*;
public class FormularioTextarea3 extends JFrame implements ActionListener{
private JScrollPane scrollpane1;
private JTextArea textarea1;
private JButton boton1;
public FormularioTextarea3 () {
setLayout(null);
textarea1=new JTextArea();
scrollpane1=new JScrollPane(textarea1);
scrollpane1.setBounds(10,10,300,200);
add(scrollpane1);
boton1=new JButton("Verificar");
boton1.setBounds(10,260,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
String texto=textarea1.getText();
if (texto.indexOf("argentina")!=-1) {
setTitle("Si contiene el texto \"argentina\"");
} else {
setTitle("No contiene el texto \"argentina\"");
}
}
}

34

ELT-753 INFORMATICA SUPERIOR I


public static void main(String[] ar) {
FormularioTextarea3 formulario1=new FormularioTextarea3 ();
formulario1.setBounds(0,0,400,380);
formulario1.setVisible(true);
}
}
Cuando se presiona el botn se ejecuta el mtodo actionPerformed y procedemos a extraer el
contenido del control TextArea a travs del mtodo getText:
String texto=textarea1.getText();
Luego mediante el mtodo indexOf de la clase String verificamos si el String "argentina" est
contenido en la variable texto:
if (texto.indexOf("argentina")!=-1) {
setTitle("Si contiene el texto \"argentina\"");
} else {
setTitle("No contiene el texto \"argentina\"");
}
Si queremos introducir una comilla doble dentro de un String de Java debemos antecederle la
barra invertida (luego dicho caracter no se lo considera parte del String):
setTitle("Si contiene el texto \"argentina\"");
EJERCICIO
1. Confeccionar un programa que permita ingresar en un control de tipo JTextArea un parrafo.
Luego al presionar un botn mostrar un mensaje si el parrafo contiene la palabra "electrnica".

JCOMBOBOX
El control JComboBox permite seleccionar un String de una lista. Para inicializar los String que
contendr el JComboBox debemos llamar al mtodo addItem tantas veces como elementos
queremos cargar.
Un evento muy til con este control es cuando el operador selecciona un Item de la lista. Para
capturar la seleccin de un item debemos implementar la interface ItemListener que contiene
un mtodo llamada itemStateChanged.
EJEMPLO 1:
Cargar en un JComboBox los nombres de varios colores. Al seleccionar alguno mostrar en la
barra de ttulo del JFrame el String seleccionado.
import javax.swing.*;
import java.awt.event.*;
public class FormularioCombo1 extends JFrame implements ItemListener{
private JComboBox combo1;
public FormularioCombo1 () {
setLayout(null);
combo1=new JComboBox();
combo1.setBounds(10,10,80,20);
add(combo1);
combo1.addItem("rojo");
combo1.addItem("vede");
combo1.addItem("azul");
combo1.addItem("amarillo");
combo1.addItem("negro");
combo1.addItemListener(this);
}
public void itemStateChanged(ItemEvent e) {
if (e.getSource()==combo1) {
String seleccionado=(String)combo1.getSelectedItem();
setTitle(seleccionado);

35

ELT-753 INFORMATICA SUPERIOR I


}
}
public static void main(String[] ar) {
FormularioCombo1 formulario1=new FormularioCombo1 ();
formulario1.setBounds(0,0,200,150);
formulario1.setVisible(true);
}
}
Indicamos a la clase que implementaremos la interface ItemListener:
public class Formulario extends JFrame implements ItemListener{
Declaramos un objeto de la clase ComboBox:
private JComboBox combo1;
En el constructor creamos el objeto de la clase JComboBox:
combo1=new JComboBox();
Posicionamos el control:
combo1.setBounds(10,10,80,20);
Aadimos el control al JFrame:
add(combo1);
Aadimos los String al JComboBox:
combo1.addItem("rojo");
combo1.addItem("vede");
combo1.addItem("azul");
combo1.addItem("amarillo");
combo1.addItem("negro");
Asociamos la clase que capturar el evento de cambio de item (con this indicamos que esta
misma clase capturar el evento):
combo1.addItemListener(this);
El mtodo itemStateChanged que debemos implementar de la interface ItemListener tiene la
siguiente sintaxis:
public void itemStateChanged(ItemEvent e) {
if (e.getSource()==combo1) {
String seleccionado=(String)combo1.getSelectedItem();
setTitle(seleccionado);
}
}
Para extraer el contenido del item seleccionado llamamos al mtodo getSelectemItem() el cual
retorna un objeto de la clase Object por lo que debemos indicarle que lo transforme en String:
String seleccionado=(String)combo1.getSelectedItem();
EJEMPLO 2:
Disponer tres controles de tipo JComboBox con valores entre 0 y 255 (cada uno representa la
cantidad de rojo, verde y azul). Luego al presionar un botn pintar el mismo con el color que se
genera combinando los valores de los JComboBox.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class FormularioCombo2 extends JFrame implements ActionListener{
private JLabel label1,label2,label3;
private JComboBox combo1,combo2,combo3;
private JButton boton1;
public FormularioCombo2 () {
setLayout(null);
label1=new JLabel("Rojo:");
label1.setBounds(10,10,100,30);
add(label1);

36

ELT-753 INFORMATICA SUPERIOR I


combo1=new JComboBox();
combo1.setBounds(120,10,50,30);
for(int f=0;f<=255;f++) {
combo1.addItem(String.valueOf(f));
}
add(combo1);
label2=new JLabel("Verde:");
label2.setBounds(10,50,100,30);
add(label2);
combo2=new JComboBox();
combo2.setBounds(120,50,50,30);
for(int f=0;f<=255;f++) {
combo2.addItem(String.valueOf(f));
}
add(combo2);
label3=new JLabel("Azul:");
label3.setBounds(10,90,100,30);
add(label3);
combo3=new JComboBox();
combo3.setBounds(120,90,50,30);
for(int f=0;f<=255;f++) {
combo3.addItem(String.valueOf(f));
}
add(combo3);
boton1=new JButton("Fijar Color");
boton1.setBounds(10,130,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
String cad1=(String)combo1.getSelectedItem();
String cad2=(String)combo2.getSelectedItem();
String cad3=(String)combo3.getSelectedItem();
int rojo=Integer.parseInt(cad1);
int verde=Integer.parseInt(cad2);
int azul=Integer.parseInt(cad3);
Color color1=new Color(rojo,verde,azul);
boton1.setBackground(color1);
}
}
public static void main(String[] ar) {
FormularioCombo2 formulario1=new FormularioCombo2 ();
formulario1.setBounds(0,0,400,300);
formulario1.setVisible(true);
}
}
Importamos el paquete java.awt ya que el mismo contiene la clase Color:
import java.awt.*;
Implementaremos la interface ActionListener ya que tenemos que cambiar el color del botn
cuando se lo presione y no haremos actividades cuando cambiemos items de los controles
JComboBox:
public class Formulario extends JFrame implements ActionListener{
Definimos los siete objetos requeridos en esta aplicacin:
private JLabel label1,label2,label3;
private JComboBox combo1,combo2,combo3;
private JButton boton1;

37

ELT-753 INFORMATICA SUPERIOR I


En el constructor creamos los objetos, primero el control label1 de la clase JLabel:
label1=new JLabel("Rojo:");
label1.setBounds(10,10,100,30);
add(label1);
Lo mismo hacemos con el objeto combo1:
combo1=new JComboBox();
combo1.setBounds(120,10,50,30);
Para aadir los 256 elementos del JComboBox disponemos un for y previa a llamar al mtodo
addItem convertimos el entero a String:
for(int f=0;f<=255;f++) {
combo1.addItem(String.valueOf(f));
}
add(combo1);
En el mtodo actionPerformed cuando detectamos que se presion el botn procedemos a
extraer los tres item seleccionados:
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
String cad1=(String)combo1.getSelectedItem();
String cad2=(String)combo2.getSelectedItem();
String cad3=(String)combo3.getSelectedItem();
Los convertimos a entero:
int rojo=Integer.parseInt(cad1);
int verde=Integer.parseInt(cad2);
int azul=Integer.parseInt(cad3);
y creamos finalmente un objeto de la clase Color, el constructor de la clase Color requiere que
le pasemos tres valores de tipo int:
Color color1=new Color(rojo,verde,azul);
Para cambiar el color de fondo del control JButton debemos llamar al mtodo setBackground y
pasarle el objeto de la clase Color:
boton1.setBackground(color1);

EJERCICIO
1. Realizar un control JComboBox de paises. Al presionar un botn mostrar en la barra del ttulo
del JFrame el pas seleccionado.

JMenuBar, JMenu, JMenuItem


Ahora veremos como crear un men de opciones y la captura de eventos de los mismos.
Cuando necesitamos implementar un men horizontal en la parte superior de un JFrame
requerimos de un objeto de la clase JMenuBar, uno o ms objetos de la clase JMenu y por
ltimo objetos de la clase JMenuItem.
Par la captura de eventos debemos implementar la interface ActionListener y asociarlo a los
controles de tipo JMenuItem, el mismo se dispara al presionar con el mouse el JMenuItem.

EJERCICIO 1:
Confeccionaremos un men de opciones que contenga tres opciones que permita cambiar el
color de fondo del JFrame a los colores: rojo, verde y azul.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class FormularioMenu extends JFrame implements ActionListener{
private JMenuBar mb;
private JMenu menu1;

38

ELT-753 INFORMATICA SUPERIOR I


private JMenuItem mi1,mi2,mi3;
public FormularioMenu () {
setLayout(null);
mb=new JMenuBar();
setJMenuBar(mb);
menu1=new JMenu("Opciones");
mb.add(menu1);
mi1=new JMenuItem("Rojo");
mi1.addActionListener(this);
menu1.add(mi1);
mi2=new JMenuItem("Verde");
mi2.addActionListener(this);
menu1.add(mi2);
mi3=new JMenuItem("Azul");
mi3.addActionListener(this);
menu1.add(mi3);
}
public void actionPerformed(ActionEvent e) {
Container f=this.getContentPane();
if (e.getSource()==mi1) {
f.setBackground(new Color(255,0,0));
}
if (e.getSource()==mi2) {
f.setBackground(new Color(0,255,0));
}
if (e.getSource()==mi3) {
f.setBackground(new Color(0,0,255));
}
}
public static void main(String[] ar) {
FormularioMenu formulario1=new FormularioMenu ();
formulario1.setBounds(10,20,300,200);
formulario1.setVisible(true);
}
}
Importamos el paquete javax.swing ya que en el mismo se encuentran las tres clases
JMenuBar, JMenu y JMenuItem:
import javax.swing.*;
Importamos java.awt donde se encuentra la clase Color:
import java.awt.*;
Para la captura de eventos mediante la interface ActionListener debemos importar el paquete
java.awt.event:
import java.awt.event.*;
Declaramos la clase Formulario, heredamos de la clase JFrame e indicamos que
implementaremos la interface ActionListener:
public class Formulario extends JFrame implements ActionListener{
Definimos un objeto de la clase JMenuBar (no importa que tan grande sea un men de
opciones solo se necesitar un solo objeto de esta clase):
private JMenuBar mb;
Definimos un objeto de la clase JMenu (esta clase tiene por objeto desplegar un conjunto de
objetos de tipo JMenuItem u otros objetos de tipo JMenu:
private JMenu menu1;
Definimos tres objetos de la clase JMenuItem (estos son los que disparan eventos cuando el
operador los selecciona:
private JMenuItem mi1,mi2,mi3;
En el constructor creamos primero el objeto de la clase JMenuBar y lo asociamos al JFrame
llamando al mtodo setJMenuBar:

39

ELT-753 INFORMATICA SUPERIOR I


mb=new JMenuBar();
setJMenuBar(mb);
Seguidamente creamos un objeto de la clase JMenu, en el constructor pasamos el String que
debe mostrar y asociamos dicho JMenu con el JMenuBar llamando al mtodo add de objeto de
tipo JMenuBar (Es decir el objeto de la clase JMenu colabora con la clase JMenuBar):
menu1=new JMenu("Opciones");
mb.add(menu1);
Ahora comenzamos a crear los objetos de la clase JMenuItem y los aadimos al objeto de la
clase JMenu (tambin mediante la llamada al mtodo addActionListener indicamos al
JMenuItem que objeto procesar el clic):
mi1=new JMenuItem("Rojo");
mi1.addActionListener(this);
menu1.add(mi1);
Lo mismo hacemos para los otros dos JMenuItem:
mi2=new JMenuItem("Verde");
mi2.addActionListener(this);
menu1.add(mi2);
mi3=new JMenuItem("Azul");
mi3.addActionListener(this);
menu1.add(mi3);
En el mtodo actionPerformed primero obtenemos la referencia al panel asociado con el
JFrame:
public void actionPerformed(ActionEvent e) {
Container f=this.getContentPane();
Luego mediante if verificamos cual de los tres JMenuItem fue seleccionado y a partir de esto
llamamos al mtodo setBackground del objeto de la clase Container):
if (e.getSource()==mi1) {
f.setBackground(new Color(255,0,0));
}
if (e.getSource()==mi2) {
f.setBackground(new Color(0,255,0));
}
if (e.getSource()==mi3) {
f.setBackground(new Color(0,0,255));
}
}

EJEMPLO 2:
Confeccionaremos un men de opciones que contenga adems del JMenu de la barra otros
dos objetos de la clase JMenu que dependan del primero.
Uno debe mostrar dos JMenuItem que permitan modificar el tamao del JFrame y el segundo
tambin debe mostrar dos JMenuItem que permitan cambiar el color de fondo.
JMenuBar JMenu JMenuItem
Programa:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class FormularioMenu2 extends JFrame implements ActionListener{
private JMenuBar mb;
private JMenu menu1,menu2,menu3;
private JMenuItem mi1,mi2,mi3,mi4;
public FormularioMenu2 () {
setLayout(null);
mb=new JMenuBar();
setJMenuBar(mb);

40

ELT-753 INFORMATICA SUPERIOR I


menu1=new JMenu("Opciones");
mb.add(menu1);
menu2=new JMenu("Tamao de la ventana");
menu1.add(menu2);
menu3=new JMenu("Color de fondo");
menu1.add(menu3);
mi1=new JMenuItem("640*480");
menu2.add(mi1);
mi1.addActionListener(this);
mi2=new JMenuItem("1024*768");
menu2.add(mi2);
mi2.addActionListener(this);
mi3=new JMenuItem("Rojo");
menu3.add(mi3);
mi3.addActionListener(this);
mi4=new JMenuItem("Verde");
menu3.add(mi4);
mi4.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==mi1) {
setSize(640,480);
}
if (e.getSource()==mi2) {
setSize(1024,768);
}
if (e.getSource()==mi3) {
getContentPane().setBackground(new Color(255,0,0));
}
if (e.getSource()==mi4) {
getContentPane().setBackground(new Color(0,255,0));
}
}
public static void main(String[] ar) {
FormularioMenu2 formulario1=new FormularioMenu2 ();
formulario1.setBounds(0,0,300,200);
formulario1.setVisible(true);
}
}
Definimos un objeto de la clase JMenuBar, 3 objetos de la clase JMenu y finalmente 4 objetos
de la clase JMenuItem:
private JMenuBar mb;
private JMenu menu1,menu2,menu3;
private JMenuItem mi1,mi2,mi3,mi4;
Es importante notar el orden de creacin de los objetos y como los relacionamos unos con
otros.
Primero creamos el JMenuBar y lo asociamos con el JFrame:
mb=new JMenuBar();
setJMenuBar(mb);
Creamos el primer JMenu y lo pasamos como parmetro al JMenuBar mediante el mtodo add:
menu1=new JMenu("Opciones");
mb.add(menu1);
Ahora creamos el segundo objeto de la clase JMenu y lo asociamos con el primer JMenu
creado:
menu2=new JMenu("Tamao de la ventana");
menu1.add(menu2);

41

ELT-753 INFORMATICA SUPERIOR I


En forma similar creamos el tercer objeto de la clase JMenu y lo asociamos con el primer
JMenu creado:
menu3=new JMenu("Color de fondo");
menu1.add(menu3);
Finalmente comenzamos a crear los objetos de la clase JMenuItem y los dos primeros los
asociamos con el segundo JMenu:
mi1=new JMenuItem("640*480");
menu2.add(mi1);
mi1.addActionListener(this);
mi2=new JMenuItem("1024*768");
menu2.add(mi2);
mi2.addActionListener(this);
Tambin hacemos lo mismo con los otros dos objetos de tipo JMenuItem pero ahora los
asociamos con el tercer JMenu:
mi3=new JMenuItem("Rojo");
menu3.add(mi3);
mi3.addActionListener(this);
mi4=new JMenuItem("Verde");
menu3.add(mi4);
mi4.addActionListener(this);
En el mtodo actionPerformed si se presiona el mi1 procedemos a redimensionar el JFrame
llamando al mtodo setSize y le pasamos dos parmetros que representan el nuevo ancho y
alto de la ventana:
if (e.getSource()==mi1) {
setSize(640,480);
}
De forma similar si se presiona el segundo JMenuItem cambiamos el tamao de la ventana a
1024 pxeles por 768:
if (e.getSource()==mi2) {
setSize(1024,768);
}
Para cambiar de color de forma similar al problema anterior mediante el mtodo
getContentPane obtenemos la referencia al objeto de la clase Container y llamamos al mtodo
setBackground para fijar un nuevo color de fondo:
if (e.getSource()==mi3) {
getContentPane().setBackground(new Color(255,0,0));
}
if (e.getSource()==mi4) {
getContentPane().setBackground(new Color(0,255,0));
}
EJERCICIO
1. Mediante dos controles de tipo JTextField permitir el ingreso de dos nmeros. Crear un men
que contenga una opcin que redimensione el JFrame con los valores ingresados por teclado.
Finalmente disponer otra opcin que finalice el programa (Finalizamos un programa java
llamando al mtodo exit de la clase System: System.exit(0))

42

Вам также может понравиться