Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ING. DE SISTEMAS
CURSO:
Tecnologa de la programacin.
INTEGRANTES:
CICLO:
IV
GUADALUPE PER
2016
TABLA DE CONTENIDO
1. Definicin:
1
No es el nico tipo de interfaz para usuarios, de hecho, el GUI surge de
una evolucin de la interfaz de lnea de comandos tradicional (llamada
tambin CLI) de los primeros sistemas operativos. El ejemplo ms
conocido es la familia de sistemas DOS (como MS-DOS). La interfaz de
lnea de comando an se emplea en mltiples casos porque en ocasiones
resulta conveniente.
2
ttulo Slider Spinner Caja de texto
(Text box o Cuadro de texto) HUD
(heads-up) Infobar Etiqueta (label)
Splash screen Throbber Toast Tooltip
Ventana Acorden Ribbon Disclosure
widget (expansor oCombutcon) Cuadro
(frame/fieldset) Barra de men
Contenedores
(menubar) Panel Panel
lateral Pestaa (tab) Barra de
herramientas
De Barra de direcciones Breadcrumb
navegacin Hipervnculo Vista de rbol (treeview)
Acerca de (about box) Cuadro de
Ventanas dilogo (dialog box) Cuadro de dilogo
especiales de archivos Inspector window Modal
window Ventana de paleta
Relacionados Widget
3
INTERFAZ GRFICA DE USUARIO EN JAVA
AWT
Swing
1. Componentes y contenedores:
4
En donde veremos que todas las clases heredan de COMPONENT quien
a su vez hereda de OBJECT. Las clases PANEL, WINDONW y FRAME
adems son containers porque heredan de CONTAINER.
Generalmente una GUI se monta sobre un Frame. Este ser el container
principal que contendr los componentes de la interfaz grfica.
5
contenedores son a su vez componentes y pueden volver a ser agrupados
en otros contenedores. Habitualmente en un contenedor habr varios
componentes y para situarlos de forma conveniente pueden usarse los
administradores de diseos.
En resumen, las clases del paquete AWT pueden clasificarse en: grficos,
componentes, administradores de diseo, manipuladores de sucesos y
manipuladores de imgenes y para poder hacer uso de las mismas y
gestionar los eventos que se produzcan, los programas deben incluir las
siguientes sentencias:
Import java.awt.*;
Import java.awt.event.*;
6
Jerarqua de eventos en java.
1.2. Componentes:
Los componentes se crean como cualquier otro objeto en java:
constructores.
Ejemplo:
7
Modificacin de la etiqueta de un botn.
boton.setLabel(Aceptar);
Consulta del texto de un campo de texto.
campo.getText();
Modificacin del texto de una etiqueta.
etiqueta.setText();
Insercin y consulta de elementos en una lista.
lista.add(Item1);
lista.add(Item2);
lista.getItem(2);
Activar o desactivar un botn.
boton.setEnabled(true);
1.3. Contenedores:
Tipos de contenedores:
A. Frame: La ventana tradicional de Windows (u otros S.O de
ventanas).
B. Dialog: Ventana que sirve para lanzar preguntas o advertencias al
usuario. No admite elementos como mens, barras de
herramientas, etc.
8
Ejemplo:
Ventana que posee un panel, dos etiquetas, un campo de texto, un
rea de texto y dos botones.
import java.awt.Frame;
import java.awt.Button;
import java.awt.TextField;
import java.awt.TextArea;
import java.awt.Panel;
import java.awt.Label;
public class MiVentana extends Frame {
Panel panelCentral;
TextField email;
Label etiqueta1;
Label etiqueta2;
TextArea mensaje;
Button enviar;
Button salir;
public MiVentana() {
panelCentral = new Panel();
email = new TextField(20);
mensaje = new TextArea(5,35);
etiqueta1 = new Label("Email:");
etiqueta2 = new Label("Escribe aqu tu Mensaje");
enviar = new Button("Enviar");
salir = new Button("Salir");
panelCentral.add(etiqueta1);
panelCentral.add(email);
panelCentral.add(etiqueta2);
panelCentral.add(mensaje);
panelCentral.add(enviar);
panelCentral.add(salir);
this.add(panelCentral);
this.setSize(300,225);
this.setTitle("Envo de Correo Electrnico"); this.show();
}
9
public static void main(String[] args)
{
new MiVentana();
}
10
3. SWING
11
javax.swing.colorchooser: Para utilizar el componente
JColorChooser.
javax.swing.event: Eventos lanzados por componentes Swing,
as como oyentes para dichos eventos. Extiende los que se
encuentran en el paquete AWT java.awt.event.
javax.swing.filechooser: Para utilizar el componente
JFileChooser.
javax.swing.plaf: Permite a Swing utilizar mltiples
representaciones. Se utiliza por aquellos desarrolladores que
no pueden crear un nuevo aspecto de interfaz, basado en los
que Swing ya incorpora (como Basic o Metal).
javax.swing.plaf.basic: Objetos que utilizan interfaces de
aspecto "Basic". Este aspecto es el que presentan por defecto
los componentes Swing. En este paquete se encuentran
gestores de impresin, eventos, oyentes y adaptadores. Se
puede crear un aspecto personalizado de interfaz utilizando
este paquete.
javax.swing.plaf.metal: Objetos que utilizan interfaces de
aspecto "Metal".
javax.swing.plaf.multi: Permite a los usuarios combinar
aspectos de interfaz, entre auxiliares y los que existen por
defecto.
javax.swing.text: Para manejar componentes de texto
(modificables o no). Soporta sintaxis resaltada, edicin,
estilos...
javax.swing.text.html: Contiene la clase HTMLEditorKit,
basada en la versin 3.2 de la especificacin HTML, y clases
para crear editores de texto HTML
javax.swing.text.html.parser: Contiene analizadores de texto
HTML javax.swing.text.rtf: Contiene la clase RTFEditorKit para
crear editores de documentos en formato RTF (Rich-Text-
Format).
12
javax.swing.tree: Para personalizar la forma en que son
utilizados los rboles generados por la clase
java.awt.swing.JTree.
javax.swing.undo: Permite realizar operaciones de
deshacer/rehacer en las aplicaciones que cree el usuario.
13
Contenedores anidados: Cualquier componente puede estar
anidado en otro. Por ejemplo, un grfico se puede anidar en una
lista.
Escritorios virtuales: Se pueden crear escritorios virtuales o
"interfaz de mltiples documentos" mediante las clases
JDesktopPane y InternalFrame.
Bordes complejos: Los componentes pueden presentar nuevos
tipos de bordes. Adems el usuario puede crear tipos de bordes
personalizados.
Dilogos personalizados: Se pueden crear multitud de formas de
mensajes y opciones de dilogo con el usuario, mediante la clase
JOptionPane.
Clases para dilogos habituales: Se puede utilizar JFileChooser
para elegir un fichero, y JColorChooser para elegir un color.
Componentes para tablas y rboles de datos: Mediante las clases
JTable y JTree.
Potentes manipuladores de texto: Adems de campos y reas de
texto, se presentan campos de sintaxis oculta JPassword, y texto
con mltiples fuentes JTextPane. Adems hay paquetes para
utilizar ficheros en formato HTML o RTF.
Capacidad para "deshacer": En gran variedad de situaciones se
pueden deshacer las modificaciones que se realizaron.
Soporte a la accesibilidad: Se facilita la generacin de interfaces
que ayuden a la accesibilidad de discapacitados, por ejemplo en
Braille.
14
componentes de Swing (clases hijas de JComponent), son hijas de
la clase Component de AWT.
ButtonGroup: Muestra una lista de elementos
(JRadioButton) con solo uno seleccionable. Cada elemento
tiene un crculo, que en caso del elemento seleccionado
contendr un "punto".
JToggleButton: Es como un botn normal, pero al ser
pinchado por el usuario queda activado.
JProgressBar: Representa una barra de estado de progreso,
mediante la que habitualmente se muestra el desarrollo de
un proceso en desarrollo (ejemplo: la instalacin de una
aplicacin).
JTabbedPane: Es una ventana con solapas (la que utiliza
Windows). Este componente haba sido muy solicitado.
JApplet: Aunque ya exista una clase Applet en AWT, esta
nueva versin es necesaria para crear applets Java que
utilicen interfaces Swing.
15
3.5. JrootPanel
16
b. Eventos semnticos
Son todos hijos del evento de AWT AWTEvent, que es el evento
base de la jerarqua de eventos:
AncestorEvent: Antecesor aadido desplazado o eliminado.
CaretEvent: El signo de intercalacin del texto ha cambiado.
ChangeEvent: Un componente ha sufrido un cambio de
estado.
DocumentEvent: Un documento ha sufrido un cambio de
estado.
HyperlinkEvent: Algo relacionado con un vnculo hipermedia
ha cambiado.
InternalFrameEvent: Un AWTEvent que aade soporte para
objetos JInternalFrame.
ListDataEvent: El contenido de una lista ha cambiado o se ha
aadido o eliminado un intervalo.
ListSelectionEvent: La seleccin de una lista ha cambiado.
MenuEvent: Un elemento de men ha sido seleccionado o
mostrado o bien no seleccionado o cancelado.
PopupMenuEvent: Algo ha cambiado en JPopupMenu.
TableColumnModelEvent: El modelo para una columna de
tabla ha cambiando.
TableModelEvent: El modelo de una tabla ha cambiado.
TreeExpansionEvent: El nodo de un rbol se ha extendido o
se ha colapsado.
TreeModelEvent: El modelo de un rbol ha cambiado.
TreeSelectionEvent: La seleccin de un rbol ha cambiado de
estado.
UndoableEditEvent: Ha ocurrido una operacin que no se
puede realizar.
17
3.7. Patrn de diseo Modelo-Vista-Controlador
4. EVENTOS
Cuando el usuario interacta con la interfaz grfica lo hace a travs de sus
componentes. Cada accin que realiza (esto es: cada botn que presiona, cada
tem que selecciona sobre una lista, cada carcter que escribe sobre un campo
de texto, etc.) genera un evento y nosotros, como programadores, lo podemos
escuchar para notificarnos y as poder hacer en ese momento lo que sea
necesario.
Es decir, los componentes generan eventos y nosotros podemos escucharlos
(o notificarnos) utilizando listeners (escuchadores). Un listener no es ms que un
objeto cuya clase implementa una determinada interface, que est relacionado
a un componente para que este lo notifica que ante la ocurrencia de un
determinado tipo de evento. Para analizar esto, comenzaremos por una GUI
bsica: una ventana con un nico botn que cuando lo apretamos escribe un
mensaje en la consola.
package libro.cap05;
import java.awt.*;
import java.awt.event.*;
public class DemoListener extends Frame
{
private Button boton;
public DemoListener()
{
super("Demo");
18
setLayout(new FlowLayout());
boton = new Button("Boton");
// agrego un listener al botn
boton.addActionListener(new EscuchaBoton());
add(boton);
setSize(200,150);
setVisible(true);
}
class EscuchaBoton implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Se presiono el boton...");
}
}
public static void main(String[] args)
{
new DemoListener();
}
}
En el constructor vemos que luego de instanciar el botn lo relacionamos con
una instancia de la inner class EscuchaBoton. Esta clase implementa la interface
ActionListener de donde hereda un nico mtodo: actionPerformed. Cuando el
botn detecte que lo estn presionando notificar a la instancia de EscuchaBoton
invocndole el mtodo actionPerformed.
Dicho de otro modo, cuando se presione el botn se invocar automticamente
el mtodo actionPerformed de la clase EscuchaBoton, por lo tanto, todo lo que
programemos dentro de este mtodo se ejecutar exactamente en el momento
en que el usuario apriete el botn. Es comn implementar los listeners como
inner classes de la GUI ya que, por lo general, las acciones que se programan
dentro de estos son propias y exclusivas para los componentes de la interfaz
grfica, por lo que muy difcilmente puedan ser reutilizados. A continuacin,
veremos un ejemplo ms simptico en el que cambiamos aleatoriamente la
19
ubicacin de la ventana cada vez que se presiona el botn. Solo veremos el
cdigo del listener ya que en la ventana principal no cambia nada.
package libro.cap05;
import java.awt.*;
import java.awt.event.*;
public class DemoListener3 extends Frame
{ private Button boton;
20
public DemoListener3()
{
super("Demo");
setLayout(new FlowLayout());
// quien genera el evento es el Frame
addMouseMotionListener(new EscuchaMouse());
boton = new Button("Boton");
add(boton);
setSize(200,150);
setVisible(true);
}
class EscuchaMouse implements MouseMotionListener
{
public void mouseMoved(MouseEvent e)
{
int distancia = 10;
Point pMouse = e.getPoint();
Dimension dimBoton=boton.getSize();
Point pBoton = boton.getLocation();
int difX1 = Math.abs(pBoton.x-pMouse.x);
int difX2 = Math.abs((pBoton.x+dimBoton.width)-pMouse.x);
int difY1 = Math.abs(pBoton.y-pMouse.y);
int difY2 = Math.abs((pBoton.y+dimBoton.height)-pMouse.y);
if(difX1<distancia || difX2<distancia || difY1<distancia || difY2<distancia)
{
// dimension de la ventana
Dimension dimVentana = getSize();
// dimension de la pantalla
Dimension dimScreen = getToolkit().getScreenSize();
// nuevas coordenadas para la ventana
int y = (int) (Math.random()*(dimScreen.height-dimVentana.height));
int x= (int) (Math.random()*(dimScreen.width-dimVentana.width));
// cambio la ubicacion de la ventana
21
setLocation(x,y);
}
}
public void mouseDragged(MouseEvent e) {}
}
public static void main(String[] args)
{
new DemoListener3();
}}
En este ejemplo escuchamos el evento que la ventana (el Frame) genera cada
vez que el mouse se mueve dentro de su rea. Por esto, le agregamos a la
ventana una instancia vlida de MouseMotionListener (o sea, una instancia de
EscuchaMouse). EscuchaMouse es una inner class que implementa
MouseMotionListener y sobrescribe los dos mtodos definidos en esta interface.
El mtodo mouseDragged lo dejamos vaco porque no nos interesa ser
notificados cuando el usuario arrastra el mouse (drag). Simplemente, queremos
saber cundo lo mueve. Dentro del mtodo mouseMoved, tomamos la posicin
del mouse, la posicin del botn y su dimensin para poder calcular la distancia
entre el mouse y los cuatro lados del botn. Si la distancia es menor que
distancia, entonces movemos la ventana.
22
no esperemos que nada demasiado emocionante ocurra, pero si
hacemos doble click sobre un tem entonces casi seguro que
estaremos esperando algn suceso. Analicemos la siguiente
interfaz grfica.
Demo de ActionListener.
package libro.cap05;
import java.awt.*;
import java.awt.event.*;
23
public class DemoListener5 extends Frame
{
private Button bAgregar;
private TextField tfItem;
private List lista;
public DemoListener5()
{
super("Action Listener");
// deno el layout principal
setLayout(new BorderLayout());
// al norte
Panel pn = _crearPNorte();
add(pn,BorderLayout.NORTH);
// al centro
lista= new List();
add(lista, BorderLayout.CENTER);
// seteo los listeners
bAgregar.addActionListener(new EscuchaAgregar());
tfItem.addActionListener(new EscuchaAgregar());
lista.addActionListener(new EscuchaDobleClick());
this.addWindowListener(new EscuchaVentana());
setSize(300,300);
setVisible(true);
// el cursor aparecera por defecto en el TextField
tfItem.requestFocus();
}
// sigue mas abajo
// :
24
// :
// viene de mas arriba
class EscuchaAgregar implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
// tomo el texto ingresado en el TextField
String item = tfItem.getText();
// lo agrego a la lista
lista.add(item);
// selecciono todo el texto en el TextField
tfItem.selectAll();
// seteo el foco en el TextField
tfItem.requestFocus();
}
}
// sigue mas abajo
// :
Veamos entonces para finalizar el cdigo de EscuchaDobleClick
// :
// viene de mas arriba
class EscuchaDobleClick implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
// tomo la posicion del item seleccionado
int idx = lista.getSelectedIndex();
// seteo el item selecciona en el TextField
tfItem.setText(lista.getSelectedItem());
// lo remuevo de la lista
lista.remove(idx);
// selecciono todo el texto del TextField
25
tfItem.selectAll();
// seteo el foco en el TextField
tfItem.requestFocus();
}
}
// :
// aqui va la inner class EscuchaCerrar y el metodo _crearPNorte
// y el metodo main
// :
}
3.1.2. Eventos de teclado
Estos eventos los generan los TextField y los TextArea cada vez
que el usuario escribe un carcter sobre el componente. En la
siguiente ventana, el usuario puede escribir un texto en un
TextField. A medida que ingresa cada carcter lo vamos mostrando
en un Label ubicado a la derecha del TextField. Cuando finaliza e
ingresa [ENTER], mostramos el texto completo en el Label y
seleccionamos el texto en el TextField pasndolo a maysculas.
Demo KeyListener
package libro.cap05;
26
import java.awt.*;
import java.awt.event.*;
public class DemoListener6 extends Frame
{
private TextField tf;
private Label lab;
public DemoListener6()
{
super("Key Listener");
// deno el layout principal
setLayout(new FlowLayout(FlowLayout.LEFT));
add( new Label("Ingrese Texto:"));
tf= new TextField(15);
add(tf);
lab=new Label();
add(lab);
// agrego los listeners al TextField
tf.addKeyListener(new EscuchaTecla());
tf.addActionListener(new EscuchaEnter());
setSize(350,100); setVisible(true);
// mando el cursor al TextField
tf.requestFocus();
addWindowListener(new EscuchaVentana());
}
class EscuchaTecla implements KeyListener
{
public void keyPressed(KeyEvent e)
{
// por cada tecla presionada tomo el carcter
char c = e.getKeyChar();
// seteo el caracter como texto del label
lab.setText(Character.toString(c));
}
27
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
}
class EscuchaEnter implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
// tomo el texto ingresado en el TextField
String texto = tf.getText();
// lo seteo como texto en el Label
lab.setText(texto);
// refresco los componentes de la ventana validate();
// combierto a mayuscula el texto del TextField
tf.setText(texto.toUpperCase());
// lo selecciono todo
tf.selectAll();
}
}
public static void main(String[] args)
{
new DemoListener6();
}
}
28
BIBLIOGRAFA
29