Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% encontró este documento útil (0 votos)
119 vistas54 páginas

S08. Construcción de GUI

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 54

Construcción de GUI

en JAVA
ING. PATRICIO AVILA, MBA, PMP®
Contenido

 Bibliotecas GUI
 Características
Introducción

 En Java, toda la programación GUI se realiza mediante


el uso de bibliotecas de clases estándares
especializadas.
 Una vez comprendidos los principios, podemos encontrar
todos los detalles necesarios en la documentación de la
biblioteca.
Bibliotecas GUI en Java

 AWT (Abstract Window Toolkit)


 JFC (Java Foundation Classes). Mejor conocida como
Swing
 SWT (Standard Widget Toolkit)
 Clase java.awt.Graphics: Define fuentes, pinta textos, para
dibujo de líneas, figuras, coloreado, etc.
AWT (Abstract Window Toolkit)
En sus orígenes Java introdujo la AWT. Ésta “creaba” los
objetos delegando su creación y comportamiento a
herramientas nativas de la plataforma donde corre la
Máquina Virtual Java. Este esquema condujo a problemas
por diferencias en distintas plataformas y Sistemas
Operativos.
La solución fue desarrollar todos los objetos de la GUI
basados sólo en elementos muy básicos y comunes en
todas las plataformas. Así surge SWING.
Como existen clases equivalentes entre AWT y SWING, las
clases SWING empiezan con la letra “J” (ejm. JButton,
JFrame).
Principios del GUI
Se pueden dividir en 3 áreas:
 ¿Qué clase de elementos podemos mostrar en una pantalla?
 COMPONENTES
 ¿Cómo podemos acomodar estos elementos?
 GESTORES DE DISPOSICIÓN
 ¿Cómo podemos reaccionar ante una entrada de usuario?
 MANEJO DE EVENTOS
Elementos Estándar en una GUI
 Un contenedor de primer nivel (JFrame, JDialog, JApplet)
 Componentes de la interfaz gráfica (botones, etiquetas, campos
de texto, etc.).
 Disposición (layout): cómo se colocan los componentes para
lograr un GUI cómodo de utilizar.
▪ Layout managers: Gestionan la organización de los componentes
gráficos de la interfaz.
 Elementos para la gestión de eventos: interactividad, respuesta
a la entrada del usuario, desplazamiento del ratón, selección en un
menú, botón pulsado, etc.
Contenedores de primer nivel

JFRAME JDIALOG

JAPPLET
JFrame
 Toda aplicación Swing tiene, al menos, un contenedor raíz (una
ventana).
 La clase JFrame proporciona ventanas al usuario.
 A su vez, JFrame incluye una serie de elementos:
Estructura de un JFrame
Contenedores
Jerarquía
Algunos métodos de JFrame
Agregar componentes simples
COMPONENTES
Los componentes se ubican en una ventana, agregándolos
a la barra de menú o al panel contenedor.
Componentes: Etiquetas, Botones, Campos, …

 Clase JButton: Botón de interacción que puede tener una etiqueta.


 Clase JLabel: Etiqueta, muestra una cadena de sólo lectura.
 Normalmente para asociar el texto con otro componente.
 Clase JTextField: Campo de una línea que permite introducir y editar texto.
 Clase JTextArea: Campo de texto de varias líneas.
 Mayor funcionalidad
 Añadir, reemplazar e insertar texto
 Barras de desplazamiento horizontal y vertical.
 Clase JMenuBar, JMenu, y JMenuItem: Para definir una barra de menús, cada
menú y los elementos de cada menú.
Uso de componentes
 1) Crear el componente, usando new:
JButton b = new JButton(“Correcto”);
 2) Añadirlo al contenedor, usando add:
contentPane.add(b); // añadir en el contenedor contentPane
▪ Si luego se quiere quitar, usar remove(componente)
 3) Invocar métodos sobre el componente y manejar eventos
System.out.println(b.getLabel());
b.setLabel(“etiqueta modificada”);
Agregar menús
Agregar menús
Manejo de eventos
Un objeto puede “escuchar” los eventos de los componentes
implementando una interfaz “oyente de eventos” (listener).

El marco de trabajo Swing y algunos de sus componentes


disparan eventos cuando ocurre algo en que otros objetos
pueden estar interesados.

Existen diferentes tipos de eventos provocados por diferentes


tipos de acciones: cuando se presiona un botón o se
selecciona un elemento de un menú, el componente dispara
un ActionEvent.
Manejo de eventos

¿Cómo convertimos un objeto en “Oyente?

Un objeto se convierte en un “oyente” de eventos


mediante la implementación de varias interfaces de
oyentes que existen.
Ejemplo: Los elementos del menú (clase JMenuItem)
disparan eventos de acción (ActionEvents) cuando son
activados por un usuario. Los objetos que desean oír
estos eventos deben implementar la interfaz
ActionListener del paquete java.awr.event.
Tratamiento de eventos
Dos categorías de eventos:
 Eventos de bajo nivel
 Están relacionados con la interacción física con la interfaz (por
ejemplo, ¿qué botón del ratón se ha pulsado?)
 Ejemplos: MouseInputEvent, WindowEvent y KeyEvent
 Eventos de alto nivel, o semánticos
 Representan operaciones lógicas realizadas sobre los elementos
(por ejemplo, se ha pulsado el botón “Salir” en la interfaz)
 ActionEvent
Tratamiento de eventos
 El objeto listener debe ser de una clase que herede la interfaz correspondiente al
tipo de evento que va a tratar
class ImageViewer implements ActionListener
{public void actionPerformed(ActionEvent e) { … }
}
 El objeto listener se añade a una lista de listeners asociados al componente de GUI
item.addActionListener(this);
 Cuando se produce un evento, se notifica a todos los objetos listeners asociados
Pasos requeridos para establecer el manejo
de eventos para un componente de GUI
 1. Crear una clase que represente al manejador de eventos.
 2. Implementar una interfaz apropiada, conocida como interfaz de escucha de eventos, en la
clase del paso 1.
 3. Indicar que se debe notificar a un objeto de la clase de los pasos 1 y 2 cuando ocurra el
evento.
 A esto se le conoce como registrar el manejador de eventos
campoTexto1.addActionListener( manejador );.
 ¿Cómo sabe el componente de la GUI que debe llamar a actionPerformed en vez de llamar a
otro?
 Cada tipo de evento tiene uno o más interfaces de escucha de eventos correspondientes.
 Los eventos tipo ActionEvent son manejados por objetos ActionListener, los eventos tipo
MouseEvent son manejados por objetos MouseListener y MouseMotionListener, y los eventos tipo
KeyEvent son manejados por objetos KeyListener.
 Las tres partes requeridas para el mecanismo de manejo de eventos
 el origen del evento, el objeto del evento y el componente de escucha del evento.
Eventos de acción: ActionEvent
 Indica que se ha producido un evento sobre un componente de la interfaz
 JButton, JList, JTextField, JMenuItem, etc.
 El método que se invoca en los listeners está definido en la interfaz ActionListener
public interface ActionListener extends EventListener {
void actionPerformed(ActionEvent e) ;
}
 Luego la clase del objeto oyente debe implementar el método actionPerformed
 Los componentes tienen métodos para poder añadir o quitar objetos oyentes
 addActionListener(ActionListener l)
 removeActionListener(ActionListener l)
Clases anidadas
 Las definiciones de clase se pueden anidar
 Las instancias de las clases internas estarán dentro de la clase contenedora
 Las instancias de la clase interna tienen acceso a la parte privada de la
clase contenedora
 Estoes práctico porque el tratamiento de un evento requiere
normalmente acceso al estado de la aplicación
Clases Internas
Clases internas anónimas
ActionListener anónimo
Manejo de eventos de teclas
 La interfaz KeyListener maneja eventos de teclas
 Una clase que implementa a KeyListener debe proporcionar declaraciones para los
métodos keyPressed, keyReleased y keyTyped, cada uno de los cuales recibe un
objeto KeyEvent como argumento.
 La clase KeyEvent es una subclase de InputEvent.
 El método keyPressed es llamado en respuesta a la acción de oprimir cualquier tecla.
 El método keyTyped es llamado en respuesta a la acción de oprimir una tecla que no
sea una tecla de acción.
 Las teclas de acción son cualquier tecla de dirección, Inicio,Fin, Re Pág, Av Pág, cualquier
tecla de función, Bloq Num, Impr Pant, Bloq Despl, Bloq Mayús y Pausa.
 El método keyReleased es llamado cuando la tecla se suelta después de un evento
keyPressed o keyTyped.
Clases adaptadoras
 Muchas de las interfaces de escucha de eventos, como MouseListener y
MouseMotionListener, contienen varios métodos.
 No siempre es deseable declarar todos los métodos en una interfaz de escucha de
eventos.
 Por ejemplo, una aplicación podría necesitar solamente el manejador mouseClicked
de la interfaz MouseListener, o el manejador mouseDragged de la interfaz
MouseMotionListener.
 El paquete java.awt.event y el paquete javax.swing.event proporcionan clases
adaptadoras de escucha de eventos.
 Una clase adaptadora implementa a una interfaz y proporciona una implementación
predeterminada (con un cuerpo vacío para los métodos) de todos los métodos en la
interfaz.
 Se puede extender una clase adaptadora para heredar la implementación
predeterminada de cada método, y en consecuencia sobrescribir sólo el(los)
método(s) que necesite para manejar eventos.
Disposición de los componentes
(layout manager)
 Cómo se colocan los componentes (usando el método add) depende del gestor de disposición
del contenedor (layout manager)
 Tipos de disposiciones:
 BorderLayout: Se ponen los componentes en un lateral o en el centro. Por defecto, en
ventanas JFrame
 GridLayout: Se colocan los componentes en una rejilla rectangular (filas x columnas)
 FlowLayout: Los componentes se ponen de izquierda a derecha hasta llenar la línea, y se
pasa a la siguiente. Cada línea se centra. Por defecto, en paneles y applets
 Para poner una disposición se utiliza el método setLayout():
GridLayout nuevolayout = new GridLayout(3,2);
setLayout(nuevolayout);
Esquema “BorderLayout”
Esquema “GridLayout”
Esquema “FlowLayout”
Esquema “BoxLayout”
Contenedores anidados
 Para conseguir diseños sofisticados lo mejor es anidar contenedores
 Se puede utilizar JPanel como contenedor básico
 Cada contenedor tendrá su layout manager específico
setLayout
Botones
 Los botones, junto con los menús, son los controles más típicos en una GUI
 Existen diferentes tipos (especializaciones de AbstractButton)
 JButton: Botón aislado. Puede pulsarse, pero su estado no cambia
 JToggleButton : Botón seleccionable. Cuando se pulsa el botón, su estado pasa a
seleccionado, hasta que se pulsa de nuevo (entonces se deselecciona)
 isSelected() permite chequear su estado
 JCheckBox : Especialización de JToggleButton que implementa una casilla de
verificación. Botón con estado interno, que cambia de apariencia de forma adecuada
según si está o no está seleccionado
 JRadioButton: Especialización de JToggleButton que tiene sentido dentro de un mismo
grupo de botones (ButtonGroup) que controla que sólamente uno de ellos está
seleccionado
 Nota: ButtonGroup es únicamente un controlador, no un componente
 El evento semántico más común anunciado por los botones es ActionEvent
Botones
Bordes
La clase Graphics
 Proporciona métodos para dibujar, rellenar, pintar imágenes, copiar áreas
y pegar gráficos en pantalla.
 drawLine
 drawRect y fillRect
 drawPolygon
 drawPolyline
 drawOval y fillOval
 drawArc y fillArc
 y para escribir texto
 drawString
 setFont
Tutoriales java swing

 API JAVA
 http://docs.oracle.com/javase/7/docs/api/index.html
 Tutoriales de Oracle
 http://docs.oracle.com/javase/tutorial/2d/index.html
 http://docs.oracle.com/javase/tutorial/index.html
 http://zetcode.com/
 http://zetcode.com/tutorials/javaswingtutorial/

También podría gustarte