Академический Документы
Профессиональный Документы
Культура Документы
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.
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)
{
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();
}
EJEMPLO 2.
public class MiVentana extends JFrame {
public MiVentana() {
super("Titulo de ventana");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
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;
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;
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
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
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
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
14
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
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
17
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
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
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);
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
21
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
23
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
25
JLABEL
26
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
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.
28
29
30
boton1=new JButton("Sumar");
boton1.setBounds(10,90,100,30);
add(boton1);
boton1.addActionListener(this);
31
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
33
34
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
36
37
EJERCICIO
1. Realizar un control JComboBox de paises. Al presionar un botn mostrar en la barra del ttulo
del JFrame el pas seleccionado.
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
39
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
41
42