0% encontró este documento útil (0 votos)
124 vistas178 páginas

Guis en Java-1pp 2012

Este documento proporciona una introducción a las interfaces gráficas de usuario (GUIs) en Java. Explica las bibliotecas Swing y AWT para crear GUIs, la jerarquía de clases Swing, y los pasos básicos para construir una interfaz como la creación de componentes, contenedores y la asociación de elementos. También incluye un primer ejemplo de programa con una GUI simple.

Cargado por

Lecx SanTiago
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
124 vistas178 páginas

Guis en Java-1pp 2012

Este documento proporciona una introducción a las interfaces gráficas de usuario (GUIs) en Java. Explica las bibliotecas Swing y AWT para crear GUIs, la jerarquía de clases Swing, y los pasos básicos para construir una interfaz como la creación de componentes, contenedores y la asociación de elementos. También incluye un primer ejemplo de programa con una GUI simple.

Cargado por

Lecx SanTiago
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 178

Dr.

Antonio LaTorre
e-mail: [email protected]
GUIs en Java
ndice
! Introduccin
! Programando con Swing
! Introduccin y Jerarqua de Swing
! Gestin de Eventos: Events, Listeners y Adapters
! Posicionamiento de los componentes: Layouts
! Interfaz grfica para el desarrollo de GUIs
! Controles Swing
Introduccin
! Las interfaces grficas permiten desarrollar aplicaciones ms
complejas
! Aumentan la interactividad y la productividad
! Sin embargo, su desarrollo conlleva una serie de complicaciones
aadidas
! Los componentes de la interfaz deben ser programados
! Necesitamos mecanismos para disponerlos en la pantalla
! Necesitamos mecanismos de control de eventos
! Afortunadamente, hay bibliotecas que nos facilitan mucho las
cosas...
Tipos de Aplicaciones
! Aplicaciones autnomas
! Aplicaciones de consola
! Aplicaciones con interfaz grfico (GUI)
! Applets
! Aplicaciones Java Web Start
Aplicaciones autnomas
! Slo necesitan la mquina virtual de Java (JVM)
! Almacenadas en el disco duro del usuario
! Se ejecutan con: java ClaseMain
! Interfaz formada por una o varias ventanas
! Aplicacin finaliza cuando se cierra la ventana
! Sin restricciones de seguridad especficas
Applets
! Necesitan de un navegador aparte de la JVM
! Normalmente, se cargan desde un servidor Web
! Comienzan su ejecucin cuando se carga la pgina Web que la
contiene
! Finaliza su ejecucin cuando se cierra la pgina
! Su interfaz se incluye en una regin rectangular del HTML
! Tiene restricciones de seguridad
Aplicaciones Web Start
! Necesitan un Gestor de Aplicaciones adems de la JVM
! Normalmente, se cargan desde la Web y se almacenan en el
disco duro local
! Se ejecutan al pulsar un enlace en una Web
! Interfaz formado por ventanas
! Finaliza cuando se cierra la ventana
! Tienen restricciones de seguridad
Bibliotecas GUI
! Abstract Windowing Toolkit (AWT)
! Standard Widget Toolkit (SWT)
! Swing / JFC (desde JDK 1.1.5)
AWT
! Look & Feel dependiente de la plataforma
! Funcionalidad independiente de la plataforma
! Controles ms bsicos
! Estndar hasta la versin 1.1.5
! Proporcionan la gestin de eventos
SWT
! Look & Feel nativo en cada sistema
! Ms ligero que Swing
! En desarrollo (puede que no todos los controles estn
disponibles)
! No incluida en JDK (hay que descargar e importar las clases)
Swing / JFC
! Ncleo de las Java Foundation Classes
! Estndar desde la versin de JDK 1.1.5
! Java Look & Feel (independiente de la plataforma)
! Pluggable Look & Feel: Windows, Mac OS X, Linux
! Otras APIs adicionales:
! Accesibilidad
! Internacionalizacin
API 2-D
Arrastrar y soltar
Paquetes JFC
! javax.accessibility
! javax.swing.plaf
! javax.swing.text.html
! javax.swing
! javax.swing.plaf.basic
! javax.swing.text.parser
! javax.swing.border
! javax.swing.plaf.metal
! javax.swing.text.rtf
! javax.swing.colorchooser
! javax.swing.plaf.multi
! javax.swing.tree
! javax.swing.event
! javax.swing.table
! javax.swing.undo
! javax.swing.filechooser
! javax.swing.text
ndice
! Introduccin
! Programando con Swing
! Introduccin y Jerarqua de Swing
! Gestin de Eventos: Events, Listeners y Adapters
! Posicionamiento de los componentes: Layouts
! Interfaz grfica para el desarrollo de GUIs
! Controles Swing
Elementos bsicos
! Componentes GUI (widgets)
! Elementos visuales del interfaz
! Un programa con GUI es un conjunto de componentes
anidados
! Administradores de diseo (Layouts managers)
! Gestionan la organizacin de los componentes
! Creacin de grficos y texto (clase Graphics)
! Interactividad: manejo de Eventos
Componentes de la GUI
! Un componente es una instancia de una clase
! Se crean como cualquier otro objeto Java
! Tipos de componentes:
! Contenedores: contienen a otros componentes
! Lienzo (clase Canvas): superficie de dibujo
! Componentes de Interfaz: botones, listas, mens, casillas de
verificacin (checkboxes), texto, etc.
! Elementos de construccin de ventanas: ventanas, marcos,
barras de mens, cuadros de dilogo, etc.
Jerarqua de clases AWT
Jerarqua de clases Swing
Primer programa con GUI

import javax.swing.*;
public class Main {
public static void main(String[] args) {
MySimpleGUI gui = new MySimpleGUI();
}
}
class MySimpleGUI extends JFrame {
public MySimpleGUI() {
setSize(400, 200);
setTitle("Ventana de tipo JFrame");
setVisible(true);
}
}
Primer programa con GUI
19

import javax.swing.*;

public class Main {
public static void main(String[] args) {
MySimpleGUI gui = new MySimpleGUI();
}
}
class MySimpleGUI extends JFrame {
public MySimpleGUI() {
setSize(400, 200);
setTitle("Ventana de tipo JFrame");
setVisible(true);
}
}
Importamos el paquete que
contiene los controles Swing
Primer programa con GUI
20

import javax.swing.*;
public class Main {
public static void main(String[] args) {
MySimpleGUI gui = new MySimpleGUI();
}
}






class MySimpleGUI extends JFrame {
public MySimpleGUI() {
setSize(400, 200);
setTitle("Ventana de tipo JFrame");
setVisible(true);
}
}
Creamos la clase que
representa nuestra ventana
extendiendo JFrame
Primer programa con GUI
21
import javax.swing.*;
public class Main {
public static void main(String[] args) {
MySimpleGUI gui = new MySimpleGUI();
}
}







class MySimpleGUI extends JFrame {

public MySimpleGUI() {
setSize(400, 200);
setTitle("Ventana de tipo JFrame");
setVisible(true);
}

}
En el constructor definimos el
tamao y el ttulo de la ventana
(y la hacemos visible)
Primer programa con GUI
22
import javax.swing.*;

public class Main {
public static void main(String[] args) {
MySimpleGUI gui = new MySimpleGUI();
}
}


class MySimpleGUI extends JFrame {
public MySimpleGUI() {
setSize(400, 200);
setTitle("Ventana de tipo JFrame");
setVisible(true);
}
}
En el mtodo main instanciamos la
clase que acabamos de crear, para
que nos muestre la ventana
Jerarqua de Swing
23
1. JComponent
1. AbstractButton
1. JButton: El botn tpico de cualquier aplicacin grfica
2. JMenuItem
1. JMenu: Elemento de un men
2. JCheckBoxMenuItem: Elemento de un men que puede ser seleccionado
3. JRadioButtonMenuItem: Elemento de un men que forma parte de un conjunto del que slo
puede haber seleccionado uno
3. JToggleButton: Botn de dos estados
1. JCheckBox: Elemento que puede estar seleccionado o no
2. JRadioButton: Se usa junto con ButtonGroup, y slo puede haber uno seleccionado
2. JColorChooser: Panel de seleccin de color
3. JComboBox: Lista desplegable de la que se puede elegir un elemento
4. JDesktopPane: Contenedor de frames internos
5. JFileChooser: Panel de seleccin de fichero
Jerarqua de Swing
24
6. JInternalFrame: Frame que puede colocarse dentro de otro contenedor
7. JLabel: Etiqueta donde se pueden poner texto e imgenes
8. JLayeredPane: Panel donde los objetos pueden estar a distinta profundidad
9. JList: Lista de elementos de la que podemos elegir uno o ms elementos
10. JMenuBar: Barra superior del programa que contiene JMenus
11. JOptionPane: Permite mostrar un dilogo (junto con JDialog)
12. JPanel: Contenedor genrico sobre el que se aaden otros componentes
13. JPopUpMenu: Men emergente que aparece al hacer click con el botn derecho
del ratn
14. JProgressBar: Barra de progreso tpica que se usa cuando una operacin lleva
cierto tiempo
15. JScrollBar: Barra de desplazamiento
16. JScrollPane: Panel contenedor con dos barras de desplazamiento
17. JSeparator: Lnea separadora (por ejemplo, dentro de un men)
Jerarqua de Swing
25
18. JSlider: Barra para seleccionar valores grficamente
19. JSpinner: Permite seleccionar valores de una lista pulsando arriba y abajo
20. JSplitPane: Panel dividido en dos partes
21. JTabbedPane: Contenedor mltiple en el que seleccionamos un conjunto de
componentes a travs de pestaas
22. JTable: Componente para mostrar informacin de forma tabular
23. JTextComponent
1. JEditorPane: Facilita la creacin de un editor
2. JTextArea: Permite la insercin de texto en mltiples lneas
3. JTextField: Igual que el anterior, pero slo en una lnea
1. JFormattedField: Permite introducir texto con formato
2. JPasswordField: El texto se oculta con el smbolo que prefiramos
24. JToolBar: Contenedor de iconos que suele aparecer en la parte superior
25. JToolTip: Texto emergente que aparece al situar el ratn sobre un control
26. JTree: Permite mostrar informacin jerarquizada en forma de rbol
Jerarqua de Swing
26
2. Window (AWT)
1. JFrame: Ventana bsica de Swing
2. JDialog: Ventana modal (no se permite acceder a la ventana madre)
normalmente usada para mostrar dilogos (aceptar/cancelar, etc.)
Jerarqua de Composicin
27
Contenedor
de alto nivel
Contenedor
intermedio
Componentes
bsicos
Ejemplo de Jerarqua de Composicin
28
Ventana principal (JFrame)
Panel Contenedor (JPanel)
Mensaje
(JLabel)
Botn Aceptar
(JButton)
Botn Cancelar
(JButton)
Pasos bsicos en la construccin de
una interfaz
29
1. Crear una nueva clase para nuestra ventana (o directamente
instanciar JFrame)
2. Crear los componentes de nuestra interfaz
3. Crear uno o varios contenedores intermedios
4. Asociar los componentes al contenedor
5. Asociar el contenedor a la ventana
6. Hacer visible la ventana
Otro Ejemplo de Interfaz
30
// 1) Creamos la clase ventana
public class EjemploInterfaz extends JFrame {

public EjemploInterfaz () {
initComponents();
}

private void initComponents() {
// 2) Configuramos los parmetros de la ventana
setSize(300, 200);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

// 2) Crear los componentes
JLabel etiqueta1 = new JLabel(Mensaje");
JTextField campoDeTexto = new JTextField(20);
JButton boton = new JButton(Aceptar");

Otro Ejemplo de Interfaz
31
// 3) Crear un contenedor
JPanel panelDeContenido = new JPanel();

// 4) Asociar los componentes al contenedor
panelDeContenido.add(etiqueta1);
panelDeContenido.add(campoDeTexto);
panelDeContenido.add(boton);

// 5) Asociar el contenedor a la ventana
setContentPane(panelDeContenido);

// 6) Hacer visible la ventana
setVisible(true);
}
}
Otro Ejemplo de Interfaz
32
Si cerramos la ventana (botn rojo) el programa no finaliza, slo
se destruye la ventana (propiedad JFrame.DISPOSE_ON_CLOSE)
Para salir del programa: JFrame.EXIT_ON_CLOSE
El botn de Aceptar, sin embargo, no hace nada
NO hay un Evento asociado!!!
ndice
! Introduccin
! Programando con Swing
! Introduccin y Jerarqua de Swing
! Gestin de Eventos: Events, Listeners y Adapters
! Posicionamiento de los componentes: Layouts
! Interfaz grfica para el desarrollo de GUIs
! Controles Swing

Eventos en Java
34
! Todo componente de la GUI puede generar eventos
! Acciones del usuario sobre el componente
! Temporizaciones
! Cambios de estado, etc.
! Modelo de Delegacin
! La responsabilidad de gestionar un evento que sucede en un
componente (Fuente) la tiene otro objeto (Oyente)
! Propagacin de Eventos
! El componente Fuente del evento invoca a un mtodo del objeto
Oyente, pasndole como un argumento un objeto que almacena
toda la informacin relativa al evento
Fuentes y Oyentes (Sources y Listeners)
35
! Fuente (Source)
! Objeto que origina o lanza eventos
! En su API se definen los eventos que puede lanzar
! Tiene interfaz para registrar Oyentes para cada tipo de evento
! Un nico oyente: set<TipoEvento>Listener
! Varios oyentes: add<TipoEvento>Listener
! Eliminar un oyente: remove<TipoEvento>Listener
! Oyente (Listener)
! Objeto que gestiona o responde a eventos
! Define uno o ms mtodos a ser invocados por la Fuente de eventos en
respuesta a cada evento especfico
! Objeto que implementa la interfaz <TipoEvento>Listener
Jerarqua de Eventos
36
! Los eventos se representan dentro de una jerarqua de clases
! Una subclase para cada evento o tipo de eventos relacionados
! Encapsulan toda la informacin del evento
! Tipo del evento: getID()
! Objeto Fuente sobre el que se produjo el evento: getSource()
! Posicin (x,y) donde se produjo el evento (eventos de ratn): getPoint()
! Tecla que se puls (eventos de teclado): getKeyChar() y getKeyCode()
! Estado de las teclas modificadoras (CTRL, SHIFT, etc.): getModifiers()
! etc.
! Raz de la jerarqua de clases: java.util.EventObject
! Se pueden crear nuevos eventos a partir de java.util.EventObject o
de java.awt.AWTEvent
Eventos: bajo nivel y semnticos
37
! Eventos de bajo nivel
! Representan entradas o interacciones de bajo nivel con la GUI
! Cambio de tamao de un componente, cambio de foco, etc.
! Eventos semnticos
! Eventos de alto nivel que encapsulan la semntica del modelo del
componente
! Hacer una accin, un cambio en el estado de un componente, etc.
! No estn asociados a una clase particular de componente, sino a
cualquiera que implemente un modelo semntico similar
! Evento Action lanzado por:
o Un botn pulsado una vez
o Un elemento de una lista pulsado dos veces seguidas
o Cuando se pulsa enter en una caja de texto, etc.
Eventos: bajo nivel y semnticos
38
Eventos de bajo nivel
Evento Significado
ComponentEvent Cambio en el tamao, posicin o visibilidad de un componente
FocusEvent Cambio de foco (capacidad de un componente de recibir entrada desde el teclado)
KeyEvent Operacin con el teclado
MouseEvent Operacin con los botones del ratn o movimientos del ratn
WindowEvent Cambio de estado en una ventana
AncestorEvent Cambio en la composicin, visibilidad o posicin de un elemento superior (ancestro) de la
jerarqua de composicin
Eventos de alto nivel
ActionEvent Realizacin de la accin especfica asociada al componente
ChangeEvent Cambio en el estado del componente
ItemEvent Elemento seleccionado o deseleccionado
CaretEvent Cambio en la posicin del cursor de insercin en un componente que gestiona texto
ListSelectionEvent Cambio en la seleccin actual en una lista
Oyentes (Listeners) de Eventos
39
! Son objetos que implementan la interfaz correspondiente al tipo de
evento a escuchar:
! ActionListener
! WindowListener
! MouseListener
! etc.
! Las clases que extienden estos interfaces tienen que implementar
TODOS los mtodos de la interfaz
! Qu pasa si slo nos interesa uno de los eventos?
! Muchos mtodos vacos
! Poca legibilidad
! Solucin: Adaptadores
Adaptadores (Adapters) de Eventos
40
! La API nos proporciona implementaciones por defecto de los
Listeners
! En realidad, nos proporciona implementaciones vacas de todos los
mtodos relacionados con un tipo de eventos
! Slo tenemos que extender de una clase adaptadora y reescribir el
mtodo deseado
Resumen del funcionamiento de los eventos
41
! Los objetos que desean gestionar los eventos y recibir dichas
notificaciones tienen que registrarse como Oyentes e implementar
los mtodos de la interfaz correspondiente
! Cuando ocurre un evento la Fuente informa a los Oyentes
registrados invocando a dichos mtodos (callback)
! En un programa Swing, normalmente la Fuente de eventos es un
componente GUI y el Oyente es un objeto adaptador que
implementa el o los Oyentes adecuados para que la aplicacin
gestione los eventos
! El Oyente tambin puede ser otro componente Swing que
implementa uno o ms interfaces Oyentes para agrupar objetos del
GUI
Ejemplo Prctico
42
! Programa que permite incrementar un nmero cada vez que se
pulse un botn
! Inicialmente el cuadro de texto contiene un 0
Ejemplo Prctico
43
import java.awt.event.*;
import javax.swing.*;

public class EjemploListeners extends JFrame {
public EjemploListeners () {
initComponents();
}
private void initComponents() {
setSize(300, 100);
text = new JTextField("0", 20);
text.setEditable(false);
button = new JButton("Pulsa para incrementar");
button.addMouseListener(new MyClickListener());
panel = new JPanel();
panel.add(text);
panel.add(button);
setContentPane(panel);
}
private class MyClickListener extends MouseAdapter {
public void mouseClicked(MouseEvent event) {
numClicks++;
text.setText(String.valueOf(numClicks));
}
private int numClicks;
}
private JPanel panel;
private JTextField text;
private JButton button;
}

Creamos la caja de texto, con un 0 al
principio y hacemos que no sea editable
Creamos el botn y le aadimos es Listener
(en este caso slo nos fijamos en los clicks)
Creamos un panel y aadimos tanto el
botn como la caja de texto
Extendemos la clase MouseAdapter y
redefinimos el mtodo mouseClicked
para que se incremente el nmero de
clicks y se modifique el contenido de la
caja de texto
Ejercicio: Suma y Resta
44
! Crear un programa que permita sumar o restar dos nmeros
! Aadir dos cajas de texto, una para cada nmero
! Aadir dos botones, uno para sumar y otro para restar
! Aadir una etiqueta para mostrar el resultado
! Cada botn tendr su propio Listener para escuchar el click
Ejercicio 2: : Suma y Resta (2)
45
! Extender el ejercicio anterior para que tanto el botn de sumar
como el de restar compartan el mismo Listener
! Para ello, en el mtodo mouseClicked deberemos comprobar
qu botn gener el evento
! En funcin de qu botn fue pulsado, realizar una operacin u
otra
Ejercicio 3: Conversor Euros a Pesetas
46
! Construir una ventana de 300x400 pxeles con el ttulo
Conversor de Euros a Pesetas
! Al cerrar la ventana, la ejecucin del programa finalizar
! La ventana debe mostrar una etiqueta con el texto: Importe en
Euros y un cuadro de texto donde introducir el importe
! Aparecer una etiqueta con el texto Pulse el botn para
convertir el importe en pesetas y un botn con el texto
Convertir
! Al pulsar el botn, se deber calcular el valor del importe en
pesetas y mostrar el nuevo valor en una tercera etiqueta
Eventos de la clase JComponent
47
Tipo de Eventos Evento
Eventos del Foco (Focus) Foco obtenido (focusGained)
Foco perdido (focusLost)
Eventos de entrada de teclado (Key) Tecla presionada (keyPressed)
Tecla soltada (keyReleased)
Tecla presionada y soltada (keyTyped)
Eventos de ratn (Mouse) Tecla del ratn presionada y soltada (mouseClicked)
El ratn entra en un componente (mouseEntered)
El ratn sale de un componente (mouseExited)
Tecla del ratn presionada (mousePressed)
Tecla del ratn soltada (mouseReleased)
Eventos de movimiento del ratn
(MouseMotion)
El ratn se ha movido mientras una tecla se encuentra
pulsada. El componente est siendo arrastrado
(mouseDragged)
El ratn se ha movido y no se est pulsando ninguna tecla
(mouseMoved)
Eventos de la rueda del ratn (MouseWheel) La rueda ha rotado. (mouseWheelMoved)
Eventos de la clase AbstractButton (JButton)
48
Tipo de eventos Evento
Eventos de accin (Action) Se ha hecho clic en el botn (actionPerformed)
Eventos de cambio (Change) El estado del botn ha cambiado (stateChanged)
Eventos de seleccin de un item (Item) Ha cambiado el estado de seleccin del botn
(itemStateChanged)
Eventos de la clase JComboBox
Tipo de eventos
Evento
Eventos de accin (Action) Se ha seleccionado un elemento. Si se puede escribir en el
cuadro de texto se genera este evento cuando se pulsa la
tecla ENTER (actionPerformed)
Eventos de seleccin de un item (Item) Ha cambiado la seleccin de la lista desplegable
(itemStateChanged) (Se disparan dos eventos)
Eventos de la clase Window (JFrame)
49
Tipo de eventos
Evento
Eventos de foco en la ventana
(WindowFocus)
Foco obtenido por la ventana (windowGainedFocus)
Foco perdido por la ventana (windowLostFocus)
Eventos del ciclo de vida de la
ventana (Window)
Ventana activada (windowActivated)
La ventana ha sido cerrada como resultado de llamar al mtodo
dispose (windowClosed)
El usuario ha pulsado el botn de cierre de la ventana
(windowClosing)
La ventana ya no es la ventana activa (windowDeactivated)
La ventana ha pasado de minimizada a normal (windowDeiconified)
La ventana se ha minimizado (windowIconified)
La ventana se ha hecho visible por primera vez (windowOpened)
Eventos de estado de la ventana
(WindowState)
La ventana ha cambiado de estado en cuanto a minimizada,
maximizada, restaurada, etc. (WindowStateChanged)
Evento de la clase JTextComponent (JTextField)
50
Tipo de eventos
Evento
Eventos de entrada de texto
(InputMethod)
El cursor ha cambiado de posicin (caretPositionChanged)
El texto introducido por teclado ha cambiado
(inputMethodTextChanged)
Eventos de cursor (Caret) El cursor ha cambiado de posicin (caretUpdate)
! Nota adicional:
! Los eventos generados en la clase padre de un componente
sern generados tambin en ese componente
! Por ejemplo, los eventos generados en la clase
java.awt.Component son generados en cualquier
componente
Ejercicio
51
! Crear una ventana con una etiqueta, un botn y un rea de texto
! La etiqueta debe medir 200x300 y tener un color de fondo
slido
! El botn debe llevar el texto Pincha aqu
! La ventana tiene que ser suficientemente grande para albergar
los tres controles
! Hay que crear Listeners para los eventos de Entrada y Salida de
la etiqueta y el Action sobre el botn
! Cada uno de esos Listeners aadir una lnea al rea de texto
diciendo qu evento ha sucedido
Ejercicio (Pistas)
52
! Mtodos para fijar el tamao
! setMinimumSize() ! Dimension(width, height)
! setMaximumSize()
! setPreferredSize()
! Mtodos para darle color a la etiqueta y hacerla opaca
! setOpaque(true)
! setBackground()-----! Color.NombreColor
! Control para el rea de texto: JTextArea
! JTextArea (fils, cols)
! textArea.append(Texto)
Ejercicio
53
! Escriba un programa que muestre una ventana con un nico botn de
Salir
! Se deben capturar los eventos de Cerrar Ventana y Click en el botn
Salir
! Pista:
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE
)
! Ambos eventos deben compartir el mismo cdigo de tratamiento
! Lo que se debe hacer es mostrar una segunda ventana con dos
botones, cuyo ttulo sea Seguro que desea salir?
! El botn de Aceptar, sale del programa: System.exit(0)
! El botn de Cancelar cierra esta ventana y vuelve a la ventana principal
! Mtodo para cerrar una ventana: dispose()
Otras maneras de implementar los Oyentes
54
! Implementando directamente los mtodos en nuestra clase
import java.awt.event.*;
import javax.swing.*;

public class EjemploListeners extends JFrame implements ActionListener {
public EjemploListeners () {
initComponents();
}
private void initComponents() {
setSize(300, 100);
text = new JTextField("0", 20);
text.setEditable(false);
button = new JButton("Pulsa para incrementar");
button.addActionListener(this);
panel = new JPanel();
panel.add(text);
panel.add(button);
add(panel);
}
public void actionPerformed(ActionEvent event) {
numClicks++;
text.setText(String.valueOf(numClicks));
}
private int numClicks;
private JPanel panel;
private JTextField text;
private JButton button;
}

Otras maneras de implementar los Oyentes
55
! Implementando clases adaptadoras annimas
import java.awt.event.*;
import javax.swing.*;

public class EjemploListeners extends JFrame {
public EjemploListeners () {
initComponents();
}
private void initComponents() {
setSize(300, 100);
text = new JTextField("0", 20);
text.setEditable(false);
button = new JButton("Pulsa para incrementar");
button.addMouseListener(
new Mouse Adapter () {
public void mouseClicked(MouseEvent event) {
numClicks++;
text.setText(String.valueOf(numClicks));
}
private int numClicks;
});
panel = new JPanel();
panel.add(text);
panel.add(button);
add(panel);
}
private JPanel panel;
private JTextField text;
private JButton button;
}

Ejercicios
56
! Rehacer el ejercicio del conversor de euros con
! El mtodo del Listener implementado directamente en nuestra
clase ventana
! Creando una clase adaptadora annima para gestionar los eventos
! Aadir un botn de borrado que limpie la caja de texto
! Pista: setText()
! Aadir un botn que nos permita salir de la aplicacin
ndice
! Introduccin
! Programando con Swing
! Introduccin y Jerarqua de Swing
! Gestin de Eventos: Events, Listeners y Adapters
! Posicionamiento de los componentes: Layouts
! Interfaz grfica para el desarrollo de GUIs
! Controles Swing
Posicionamiento de los componentes: Layouts
58
! Los Layouts nos permiten distribuir los controles de distintas
maneras en un contenedor
! Cada contenedor puede tener su Layout:
! Por ejemplo, una ventana puede tener un Layout, contener dos
JPanels dispuestos segn ese Layout y, luego, cada JPanel podra
tener su propio Layout
Tipos de Layout
59
Se pueden usar a mano
A medio camino
Mejor usar con un IDE
BorderLayout
60
! Los paneles de contenido de los JFrame, por defecto, estn
inicializados con este tipo de Layout
! Permite colocar componentes (simples o contenedores) en
cinco posiciones: Arriba, Abajo, Izquierda, Derecha y Centro
! Las posiciones se indican al aadir el componente al contenedor
(mediante el mtodo add que ya hemos visto)
! Arriba: PAGE_START o NORTH
! Abajo: PAGE_END o SOUTH
! Izquierda: LINE_START o WEST
! Derecha: LINE_END o EAST
! Centro: CENTER
BorderLayout
61
! Funciones importantes del API:
! BorderLayout(int horizontalGap, int verticalGap)
! setHgap (int)
! setVgap (int)
BorderLayout
62
// Creamos el layout con gap de 5 pxeles en ambos lados
BorderLayout layout = new BorderLayout( 5, 5 );

// Asociamos el layout al Frame actual
setLayout( layout );

// Aadimos el botn al Frame, en la posicin Norte
JButton button = new JButton(NORTH);
add( button, BorderLayout.NORTH );
Ejercicio
63
! Crear la interfaz que se observa dos transparencias ms atrs
usando BorderLayout para colocar los botones
! Al pulsar un botn, ese botn debe ocultarse (necesitaremos un
Listener que controle la pulsacin de los botones)
! El resto de botones ocuparn el espacio disponible
automticamente
! Si haba otro botn oculto, debe volver a mostrarse (slo debe
haber un botn oculto cada vez)
! Consejo: usar un array de JButtons y el mismo Listener para todos
BoxLayout
64
! Este layout nos permite dos tipos de disposicin de los componentes:
! Unos encima de otros (slo un componente por fila)
! Unos al lado de los otros (todos en la misma fila)
! En el constructor del Layout se le asocia con el contenedor
! Tambin se indica sobre qu eje se va a hacer la ordenacin
! Horizontal: BoxLayout.X_AXIS
! Vertical: BoxLayout.Y_AXIS
! Los componentes se crean y aaden normalmente
! Podemos decidir cmo se alinearn entre ellos mediante un valor real
que medir el desplazamiento con respecto a los bordes. Hay varias
constantes predefinidas: TOP_ALIGNMENT, BOTTOM_ALINGMENT,
LEFT_ALIGNMENT, RIGHT_ALIGNMENT y
CENTER_ALIGNMENT
BoxLayout
65
// Creamos una ventana y recuperamos su contenedor
JFrame frame = new JFrame("BoxLayoutDemo");
// Alternativa a crearnos nuestro JPanel, usar el contenedor por defecto del JFrame
//JPanel container = new JPanel();
Container container = frame.getContentPane();

// Asociamos al contenedor un BoxLayout vertical
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));

// Creamos un botn, decimos que lo alinee por el medio y lo aadimos al
// contenedor
JButton button = new JButton(text);
button.setAlignmentX(Component.CENTER_ALIGNMENT);
container.add(button);
BoxLayout
66
! ste sera un ejemplo de BoxLayout
Peligros de los Layouts
67
! Tienden a ocupar el mximo espacio disponible
! Intentan rellenar todo el espacio posible...
! ... respetando las restricciones de los componentes (a veces)
! setMinimumSize(Dimension d) Tamao mnimo (horizontal y vertical)
! setPreferredSize(Dimension d) Tamao preferido (horizontal y vertical)
! setMaximumSize(Dimension d) Tamao mximo (horizontal y vertical)
! Muchos Layouts ignoran el tamao mximo (p.ej.:
BorderLayout)
! Slo se usa el tamao preferido cuando el resto del espacio est
lleno
! Por otros controles o por rellenadores transparentes
Rellenadores invisibles (Invisible Fillers)
68
! Creados a partir de la clase Box (siempre con BoxLayout!!)
! Espacio fijo entre componentes: Rigid Area
! Box.createRigidArea(Dimension size)
! Espacio ajustable: Glue
! Box.createHorizontalGlue() y Box.createVerticalGlue()
Rellenadores invisibles (Invisible Fillers)
69
! Espacio Fijo con valores mnimo, preferido y mximo: Custom
Box.Filler
! Box.Filler(Dimension minSize, Dimension prefSize, Dimension maxSize)
! Si no queremos darle al JFrame un tamao al crearlo
! invocar al mtodo de empaquetado: frame.pack()
Ejercicio
70
! Crear una ventana y asociarle un BoxLayout
! Aadir tres etiquetas opacas de distintos colores y tamaos
(setMaximumSize)
! Conseguir los efectos de las tres imgenes de abajo
CardLayout
71
! Permite definir un rea donde mostrar distintos componentes
en distintos momentos
! Un efecto parecido se consigue con un JTabbedPane
FlowLayout
72
! Es el layout por defecto de JPanel
! Lo hemos estado usando hasta ahora sin saberlo...
! Simplemente, muestra los componentes en una nica fila
! Comienza una nueva fila si el espacio en la anterior no es suficiente
GridLayout
73
! Distribuye un nmero determinado de componentes en una
matriz de m filas y n columnas (el nmero de filas es opcional)
! Al construir el objeto podemos seleccionar el nmero de filas y
de columnas, as como el espacio horizontal y vertical entre los
componentes
! GridLayout(int rows, int cols, int hgap, int vgap)
GridLayout
74
// Creamos un panel
JPanel compsToExperiment = new JPanel();

// Creamos un GridLayout de 2 columnas y tantas filas
// como sean necesarias
GridLayout experimentLayout = new GridLayout(0,2);

// Asociamos el layout al panel
compsToExperiment.setLayout(experimentLayout);

// Aadimos el botn al panel normalmente
compsToExperiment.add(new JButton("Button 1"));
Ejercicio
75
! Crear una ventana con la interfaz de dos transparencias atrs
! El contenedor principal tiene que tener un layout de tipo Border
! En la parte superior crearemos un panel con layout de tipo Grid
! En la parte central aadiremos un separador (JSeparator)
! En la parte inferior crearemos un panel con layout de tipo Grid (Nota: el
espacio de la derecha de las etiquetas lo conseguimos con una etiqueta
vaca)
! En lugar de JComboBox utilizaremos JTextField para introducir los
valores de Gap
! El botn de la derecha, al ser pulsado, debe modificar el Gap del
GridLayout superior con los valores de las cajas de texto
GridBagLayout
76
! Permite situar los controles en una rejilla (igual que el
anterior). Sin embargo...
! No todas las filas/columnas tienen la misma altura/anchura
! Un mismo componente puede expandirse varias filas/columnas
! Podemos aadir restricciones sobre lo que puede un componente
crecer
GroupLayout
77
! Layout muy complejo pensado para ser usado junto con
diseadores grficos de interfaces
! Maneja los layouts horizontal y vertical por separado
! La posicin de cada componente tiene que ser especificada por
duplicado
SpringLayout
78
! Layout muy complejo pensado para ser usado junto con
diseadores grficos de interfaces
! Permite definir relaciones precisas entre los bordes de cada par
de componentes (distancia entre bordes, por ejemplo)
ndice
! Introduccin
! Programando con Swing
! Introduccin y Jerarqua de Swing
! Gestin de Eventos: Events, Listeners y Adapters
! Posicionamiento de los componentes: Layouts
! Interfaz grfica para el desarrollo de GUIs
! Controles Swing
Netbeans GUI Designer
80
No sera maravilloso ahorrarse todo
este esfuerzo de programacin?
Netbeans GUI Designer!!!
Netbeans GUI Designer
81
Netbeans GUI Designer
82
! Podemos crear un nuevo formulario desde el Men Archivo
! Permite arrastrar los componentes desde la Paleta a la ventana
que hayamos seleccionado
! Podemos modificar las propiedades de los componentes desde el
men lateral
! NO podemos modificar el cdigo que genera automticamente
para pintar los componentes
ndice
! Introduccin
! Programando con Swing
! Introduccin y Jerarqua de Swing
! Gestin de Eventos: Events, Listeners y Adapters
! Posicionamiento de los componentes: Layouts
! Interfaz grfica para el desarrollo de GUIs
! Controles Swing
Clase JFrame
84
! La clase JFrame proporciona una ventana principal de aplicacin
con su funcionalidad normal (p.ej.: borde, ttulo, mens) y un
panel de contenido
! Los contenidos se aaden en el panel de contenidos (content
pane) accesible a travs del mtodo getContentPane (por
defecto, un objeto de tipo
JPane, aunque puede cambiarse
con setContentPane)
! La barra de men puede fijarse
con setJMenuBar
Clase JFrame
85
! Algunos mtodos y propiedades tiles:
! public JFrame()
! public JFrame(String titulo)
! public void setTitle(String titulo)
! public void setSize(int ancho, int alto)
! public void setDefaultCloseOperation(int operacion)
JFrame.EXIT_ON_CLOSE
WindowConstants.DO_NOTHING_ON_CLOSE
WindowConstants.HIDE_ON_CLOSE
WindowConstants.DISPOSE_ON_CLOSE
! public void pack()
Clase JFrame
86
! public void setResizable(boolean resizable)
! public void setExtendedState(int state)
Frame.NORMAL
Frame.ICONIFIED
Frame.MAXIMIZED_BOTH
Frame.MAXIMIZED_HORIZ
Frame.MAXIMIZED_VER
! public void setLocation(int x, int y)
! public void setLocationRelativeTo(Component c)
! public void setVisible(boolean visible)
! public void setContentPane(Container c)
! public void setJMenuBar(JMenuBar menubar)
Ejercicio
87
! Crear una ventana que contenga dos botones
! El primer botn nos permite mostrar u ocultar una segunda
ventana (que se crea al construir la primera pero no se muestra)
! El segundo botn nos permite mover la segunda ventana (slo si
est visible) a posiciones aleatorias en la pantalla
! La ventana auxiliar debe:
! Tener un botn para salir de programa
! Aparecer siempre centrada despus de ocultarla
! Si se pincha en el icono de cerrar, debe ocultarse nicamente
! No puede ser cambiada de tamao
Clase JDialog
88
! La clase JDialog es la clase raz de las ventanas secundarias que
implementan cuadros de dilogo en Swing
! Dependen de una ventana principal (normalmente JFrame) y si la
ventana principal se cierra, se iconiza o se desiconiza, las ventanas
secundarias realizan la misma operacin de forma automtica.
! Las ventanas modales bloquean la interaccin del usuario con
otras ventanas
! Se utilizan slo cuando hay que garantizar que el usuario recibe un
mensaje o proporciona una informacin que es necesaria.
Clase JOptionPane
89
! Permite crear nuevos cuadros de dilogo o usar algunos de los
ms comunes:
! Message, para informar al usuario sobre algn hecho relevante
! Confirm, para realizar una pregunta al usuario con las
posibilidades bsicas de respuesta de S, No o Cancelar.
! Input, para solicitar una entrada del usuario
! Option, permite crear una ventana personalizada de cualquiera de
los tipos anteriores
! Si no usamos ninguno de stos, instanciamos un objeto nuevo de
la clase JOptionPane y se lo asociamos a un objeto de la clase
JDialog
showMessageDialog
90
//default title and icon
JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be
green., "Message, JOptionPane.INFORMATION_MESSAGE);



//custom title, warning icon
JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be
green., "Inane warning, JOptionPane.WARNING_MESSAGE);
showMessageDialog
91
//custom title, error icon
JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be
green., "Inane error, JOptionPane.ERROR_MESSAGE);



//custom title, no icon
JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be
green., "A plain message, JOptionPane.PLAIN_MESSAGE);
showMessageDialog
92
//custom title, custom icon
JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be
green., "Inane custom dialog, JOptionPane.INFORMATION_MESSAGE,
icon);
showConfirmDialog
93
//default icon, custom title
int n = JOptionPane.showConfirmDialog(frame, "Would you like green eggs and
ham?, "An Inane Question, JOptionPane.YES_NO_OPTION);




Object[] options = {"Yes, please",
"No way!"};
int n = JOptionPane.showOptionDialog(frame, "Would you like green eggs
and ham?, "A Silly Question, JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, //do not use a custom Icon
options, //the titles of buttons
options[0]); //default button title
showInputDialog
94
Object[] possibilities = {"ham", "spam", "yam"};
String s = (String)JOptionPane.showInputDialog(frame, "Complete
the sentence:\n + "\"Green eggs and...\", "Customized Dialog",
JOptionPane.PLAIN_MESSAGE, icon, possibilities, "ham");

//If a string was returned, say so.
if ((s != null) && (s.length() > 0)) {
etiqueta.setText("Green eggs and... " + s + "!");
return;
}

//If you're here, the return value was null/empty.
etiqueta.setText ("Come on, finish the sentence!");
showInputDialog
95
! Si no nos interesa limitar las opciones del usuario y preferimos
mostrar una caja de texto, tenemos que pasar null en lugar de
possibilities
showOptionDialog
96
//Custom button text
Object[] options = {"Yes, please, "No, thanks, "No eggs, no ham!"};

int n = JOptionPane.showOptionDialog(frame, "Would you like some green
eggs to go + "with that ham?, "A Silly Question,
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, options, options[2]);
Valores de retorno
97
! Si el mtodo showXXXDialog devuelve un entero, los posibles
valores de retorno son:
! JOptionPane.YES_OPTION
! JOptionPane.NO_OPTION
! JOptionPane.CANCEL_OPTION
! JOptionPane.OK_OPTION
! JOptionPane.CLOSED_OPTION
! En otro caso, devolver un String con la opcin seleccionada
(como en los ejemplos que hemos visto)
JOptionPane + JDialog
98
JDialog dialog = new JDialog(frame, "Click a button", true);

JOptionPane optionPane = new JOptionPane("The only way to close this
dialog is by\n + "pressing one of the following buttons.\n + "Do you
understand?, JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION);

dialog.setContentPane(optionPane);
JOptionPane + JDialog
99

public class CreateDialogFromOptionPane {
public static void main(final String[] args) {
JFrame parent = new JFrame();

JOptionPane optionPane = new JOptionPane("The only way to close this
dialog is by\n + "pressing one of the following buttons.\n + "Do you understand?,
JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION);

JDialog dialog = optionPane.createDialog(parent, "Manual Creation");

dialog.setVisible(true);
}
}
Ejercicio
100
! Crear una ventana principal (JFrame)
! Al pulsar en el botn de cerrar la ventana, debe aparecer un
dilogo de confirmacin que nos pregunte si realmente
queremos cerrar la ventana. Los textos de los botones deben
personalizarse
! Ha de haber un botn que nos muestre un mensaje (slo con un
botn de aceptar)
! Otro botn nos mostrar un dilogo para introducir un texto
que deber mostrarse en una etiqueta de la ventana principal
Clase JPanel
101
! Contenedor de propsito general donde organizar los
elementos de la ventana
! Se puede insertar cualquier tipo de componente en un panel
! Distintos Layout Managers pueden ser usados en distintos paneles
! El procedimiento de uso habitual consiste en:
! Construir el panel
! Aadirle componentes
! Insertarlo en el contenedor adecuado
Clase JPanel
102
! Algunos mtodos tiles
! public JPanel()
! public JPanel(LayoutManager layout)
! public Component add(Component comp)
! public setLayout(LayoutManager l)
! public void remove(Component c)
Clase JLabel
103
! rea que permite mostrar un texto, una imagen o ambos
! No es editable, y no puede obtener
el foco del teclado
! Se suele utilizar con otros componentes
para indicar su finalidad (por ejemplo,
con un JTextField para explicar qu
texto debe ser introducido)
! Por defecto, su fondo es transparente (por lo que no basta con
darle un color de fondo para que ste se vea, hay que hacerlas
opacas)
Clase JLabel
104
! Algunos mtodos y propiedades tiles:
! public JLabel(String texto)
! public JLabel(Icon icono)
! public JLabel(String text, int alineacionHorizontal)
! Tipos de alineado: JLabel.LEFT, JLabel.RIGHT, JLabel.CENTER,
JLabel.LEADING, JLabel.TRAILING
! public void setText(String texto)
! public String getText()
! public Icon getIcon()
! public setIcon(Icon icono)
Clase JTextField
105
! Campo de texto de una sola lnea
! Existen especializaciones para tipos concretos de informacin
(que veremos a continuacin)
! Suelen usarse junto con un
JLabel que indican el texto
que debemos introducir en
ese campo
Clase JTextField
106
! Algunos mtodos tiles
! public JTextField(int numCols)
! public JTextField(String texto, int numCols)
! public void setFont(Font fuente)
! public String getText()
! public String getSelectedText()
! public void copy()
! public void cut()
! public void paste()
! public void setEditable(boolean b)
Ejercicio
107
! Crear una ventana con dos cajas de texto, una editable, y la otra
no
! Habr tres botones: uno para copiar, otro para cortar y otro
para pegar
! Cuando se pulse en uno de los dos primeros botones, se deber
copiar/cortar nicamente el texto seleccionado
! Si se pulsa el botn de pegar, el texto copiado/cortado habr
que pegarlo en la caja de texto no editable
! Pista: no podemos pegar en una caja no editable (con paste())
! Solucin: la hacemos editable, pegamos y la volvemos a hacer no
editable
Clase JPasswordField
108
! Podemos usar una especializacin de JTextField que oculta los
caracteres que vamos tecleando (para meter contraseas, p.ej.)
! Se puede personalizar el
carcter que se muestra
para ocultar la informacin
! La gestin de eventos es la misma que en el caso de JTextField
! Algunos mtodos tiles:
! public JPasswordField() y public JPasswordField(String ini, int ancho)
! public char[] getPassword()
! public void setEchoChar(char oculta)
! public void selectAll()
Ejercicio
109
! Crear una ventana como la de la anterior transparencia
! La clase que representa nuestra ventana tendr un atributo con
una contrasea que nosotros elijamos
! Si se pulsa el botn de OK, se deber comparar la contrasea
con la que tenemos almacenada
! Mostrar un dilogo informando si la contrasea es correcta o
no
Clase JFormattedTextField
110
! Permite introducir y mostrar texto con un formato predefinido
! Hace uso de un objeto formatter que permite transformar lo que
se ve en el valor que hay por debajo
y viceversa
! Podemos usar alguno de los formatters
por defecto o crear el nuestro propio
! Diferencia entre texto (lo que vemos)
y valor (lo que se esconde detrs)
! Ms informacin en:
http://java.sun.com/docs/books/tutorial/uiswing/
components/formattedtextfield.html
Clase JFormattedTextField
111
! Algunos mtodos tiles
! public JFormattedTextField()
! public JFormattedTextField(AbstractFormatter formateador)
! public Object getValue()
! public void setValue(Object valor)
! public void setFocusLostBehavior(int comportamiento)
! COMMIT_OR_REVERT, COMMIT, REVERT y PERSIST
! public void setCommitsOnValidEdit(boolean comportamiento)
! public boolean isEditValid()
Clase JTextArea
112
! Es un campo de texto que admite un nmero indeterminado de
filas y columnas
! Si necesitamos poder hacer scroll tenemos que aadir el objeto
a un JScrollPane
! Cuidado, porque si usamos
el editor de, p.ej., Netbeans,
lo aadir automticamente,
y podra parecer que no es
necesario...
! Se le pueden aplicar los
mtodos vistos en la clase JTextField
Clase JTextArea
113
! Algunos mtodos tiles
! public JTextArea()
! public JTextArea(int filas, int columnas)
! public JTextArea(String texto, int filas, int columnas)
! public int getRows()
! public int getColumns()
! public void append(String texto)
! public void insert(String texto, int posicion)
! public void setCaretPosition(int position)
! Podemos recuperar la longitud de un JTextArea mediante:
myTextArea.getDocument().getLength()
Clases JEditorPane y JTextPane
114
! Clases para insertar texto con formato
! JTextPane extiende a JEditorPane
! Ambos permiten mostrar texto enriquecido
! JEditorPane permite cargar
texto desde una URL
! JTextPane implementa el
modelo vista-controlador
! Hacen uso de los
StyleEditorKits
! Pueden mostrar imgenes
! JEditorPane slo desde HTML

Clases JEditorPane y JTextPane
115
! Algunos mtodos tiles de JEditorPane
! public JEditorPane(URL pagina)
! public JEditorPane(String pagina)
! public void setPage(URL pagina)
! public void setPage(String pagina)
! public URL getPage()
! Algunos mtodos tiles de JTextPane
! public JTextPane()
! public JTextPane(StyledDocument doc)
! public StyledDocument getStyledDocument()
! public void setStyledDocument(StyledDocument doc)
Ejercicio
116
! Crear un JEditorPane a partir del contenido de una URL
Clase JButton
117
! Los botones tpicos de las aplicaciones con GUI
! Su principal funcin es la de generar un evento cuando se hace
click sobre ellos
! Su contenido pueden ser tanto texto, como imgenes o
combinaciones de ambos
Clase JButton
118
! Algunos mtodos tiles
! public JButton(String texto)
! public JButton(Icon icono)
! public JButton(String texto, Icon icono)
! public String getText()
! public void setText(String label)
! public void setEnabled(boolean b)
! public void setMnemonic(int i)
! KeyEvent.VK_0 VK_9
! KeyEvent.VK_A VK_Z
Ejercicio
119
! Crear la ventana de dos transparencias atrs (las imgenes no
son necesarias)
! Cuando se pulsa en el botn de la izquierda, el botn central
debe deshabilitarse
! Cuando se pulsa el botn de la derecha, el botn central debe
volver a habilitarse
! Tenemos que aadir mnemnicos para ejecutar la accin de cada
uno de los botones
! Al invocar un botn mediante su mnemnico, se lanza el evento
ActionEvent...
Clase JToggleButton
120
! Botn de dos estados (pulsado o no pulsado)
! Ejemplo de estos botones
! Barras de tareas de editores de texto (negrita, subrayado, cursiva,
etc.)
! Puede usarse tanto con texto como con imgenes
! API muy parecida a la de la clase JButton
Clase JToggleButton
121
! Algunos mtodos tiles
! public JToggleButton(String texto, boolean estado)
! public JToggleButton(Icon icono, boolean estado)
! public JToggleButton(String texto, Icon icono, boolean estado)
! public boolean isSelected()
! public void setSelected()
Clase JCheckBox
122
! Componente que puede estar seleccionado o no y que muestra
su estado
! No hay limitacin en cuanto al
nmero de Checkboxes que pueden
estar seleccionados
! Apariencia como en la imagen
! Pueden mostrar un texto o imagen que indiquen su finalidad
! Tambin se les puede asociar atajos de teclado
! Pueden ser usados en mens mediante la clase
JCheckBoxMenuItem
Clase JCheckBox
123
! Algunos mtodos tiles
! public JCheckBox()
! public JCheckBox(String texto, boolean seleccionado)
! public JCheckBox(Icon icono, boolean seleccionado)
! public JCheckBox(String texto, Icon icono, boolean seleccionado)
! public boolean isSelected()
! public void setSelected(boolean b)
! public String getText()
! public void setEnabled(boolean b)
Ejercicio
124
! Vamos a crear la ventana de dos transparencias atrs
! La etiqueta de la derecha debe mostrar la imagen
correspondiente a la combinacin de valores seleccionada con
los Check Boxes
! Hay una imagen por cada combinacin: con la barbilla
cambiada, el pelo cambiado, gafas cambiadas, dientes
cambiados, pelo y gafas cambiados a la vez, etc.
! Despus de cada cambio en la seleccin debemos actualizar el
contenido de la etiqueta con el contenido adecuado
Clases JRadioButton y ButtonGroup
125
! ButtonGroup permite agrupar una serie de casillas de
verificacin (JRadioButton) de entre las que slo puede
seleccionarse una
! Marcar una de las casillas implica
que el resto sean desmarcadas
automticamente
! Hay que crear un ButtonGroup y
luego aadirle los botones
! Si se aade ms de un botn seleccionado inicialmente,
prevalecer el primero de ellos
Clases JRadioButton y ButtonGroup
126
! Algunos mtodos tiles de ButtonGroup
! public ButtonGroup()
! public void add(AbstractButton b)
! Algunos mtodos tiles de JRadioButton
! public JRadioButton()
! public JRadioButton(String texto, boolean seleccionado)
! public boolean isSelected()
! public void setSelected(boolean b)
! public String getText()
! public void setEnabled(boolean b)
Ejercicio
127
! Vamos a crear la ventana de dos transparencias atrs
! Hay que crear un ButtonGroup y aadirle varios JRadioButtons
! Cada uno de estos botones nos permitir seleccionar el animal a
mostrar en la etiqueta de la derecha
! El contenido de la etiqueta se actualizar en funcin de la
seleccin llevada a cabo
Clase JList
128
! Lista sobre la que se puede ver y seleccionar ms de un
elemento simultneamente
! Si hay ms elementos de los que se puede visualizar, podemos
usar JScrollPanel para que aparezcan barras de desplazamiento
! Puede configurarse la orientacin y cmo se seleccionan los
elementos
Clase JList
129
! Algunos mtodos tiles
! public JList()
! public JList(Object[] listaItems)
! public JList(Vector listaItems)
! public int getSelectedIndex()
! public int[] getSelectedIndices()
! public Object getSelectedValue()
! public Object[] getSelectedValues()
! public void setLayoutOrientation(int orientacion)
! JList.VERTICAL, JList.HORIZONTAL_WRAP y JList.VERTICAL_WRAP
! public void setSelectionMode(int modo)
! ListSelectionModel.SINGLE_SELECTION,
ListSelectionModel.SINGLE_INTERVAL_SELECTION,
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION
! public ListModel getModel()
Clase JList
130
! ListModel
! Es el contenedor real de los datos
! Puede personalizarse (aunque DefaultListModel suele ser suficiente)
! Por defecto, los otros constructores crean JLists de slo lectura
! Uso de ListModel
DefaultListModel listModel = new DefaultListModel();
listModel.addElement(elemento);
JList = new JList(listModel);
listModel.addElement(otro_elemento);
listModel.removeElement(indice);
listModel.clear();
Ejercicio
131
! Hay que crear una ventana que contendr un JList en la parte
superior y un cuadro de texto y dos botones en la parte inferior
! Uno de los botones servir para aadir elementos a la lista y el
otro para borrarlos
! El botn de borrar elementos slo estar activo cuando haya
algn elemento (o varios) de la lista seleccionado. Al hacer click,
el elemento (o elementos) seleccionado ser borrado
! El botn de aadir elementos slo estar activo si en el cuadro
de texto hay algn texto introducido. Al hacer click, el texto
que haya en el cuadro de texto se aadir como un nuevo
elemento a la lista
Clase JComboBox
132
! Lista desplegable de la que slo se puede elegir una opcin
! Se pueden crear JComboBoxes tanto editables como no
editables
! Si se hace editable, podemos utilizar el evento Action para
aadir el nuevo elemento
Clase JComboBox
133
! Algunos mtodos tiles
! public JComboBox()
! public JComboBox(Object[] items)
! public JComboBox(Vector items)
! public void addItem(Object item)
! public Object getItem(int indice)
! public int getSelectedIndex()
! public Object getSelectedItem()
! public void setEditable(boolean editable)
! Public ComboBoxModel getModel()
Ejercicios
134
! Repetiremos el ejercicio de los JRadioButtons
! En lugar de seleccionar el animal a mostrar mediante dichos botones,
lo haremos usando un JComboBox
! El JComboBox ser no editable
! Por otro lado, crearemos una ventana con un JComboBox que sea
editable
! Si escribimos nuevo texto y pulsamos Enter (lanzar un evento accin
en el JComboBox) el texto que hayamos introducido se aadir como
un elemento nuevo del JComboBox
! Pista: event.getActionCommand.equals(comboBoxEdited)
Clases JMenuBar, JMenu, JMenuItem, etc.
135
! Barra superior de un programa con GUI que permite
seleccionar una serie de acciones
! Pueden contener sublistas (submens)
! La estructura bsica se compone de:
! JMenuBar: la barra superior
! JMenu: cada uno de los mens
! JMenuItem: cada uno de los
elementos de un men (p.ej.
JCheckBoxMenuItem,
JRadioButtonMenuItem o
incluso JMenu)
Clases JMenuBar, JMenu, JMenuItem, etc.
136
! Algunos mtodos tiles de JMenuBar
! public JMenuBar()
! public JMenu add(JMenu m)
! public JMenu getMenu(int indice)
! Algunos mtodos tiles de JMenu
! public JMenu(String s)
! public JMenu add(JMenuItem menuItem)
! public JMenu add(String s)
! public void addSeparator()
! public JMenuItem getItem(int pos)
Clases JMenuBar, JMenu, JMenuItem, etc.
137
! Algunos mtodos tiles de JMenuItem
! public JMenuItem()
! public JMenuItem(String texto)
! public JMenuItem(Icon icono)
! public void setEnabled(boolean b)
! Mnemnicos y Aceleradores
! public void setMnemonic(int mnemonico)
! public void setAccelerator(KeyStroke combinacion)
! Aadiendo la barra de men a la ventana (JFrame)
! public void setMenuBar(MenuBar mb)
Ejercicio
138
! Reharemos el ejercicio de copiar, cortar y pegar
! En lugar de usar botones para llevar a cabo las acciones,
crearemos una barra de men, aadiremos un men de Editar
y en este men aadiremos los items de Copiar, Cortar y
Pegar
! En este caso, en lugar de JTextFields usaremos JTextAreas y
ambas reas sern editables
! Controlaremos en qu rea est el foco actualmente y
realizaremos la accin sobre el texto que haya seleccionado en el
rea que tenga el foco
! Asignaremos los mnemnicos habituales a las tres acciones
Clase JSeparator
139
! Control muy sencillo de utilizar
! Se utiliza sobre todo para separar elementos dentro de un men
! Aunque se puede usar para
separar cualquier tipo de
componente
! Para aadirlo a un men
! menu.addSeparator()
! Y a una barra de herramientas
! barra.addSeparator()
Clase JSeparator
140
! Algunos mtodos tiles
! public JSeparator()
! public JSeparator(int orientacion)
! SwingConstants.HORIZONTAL y SwingConstants.VERTICAL
! public int getOrientation()
! public void setOrientation(int orientacion)
Clase JToolBar
141
! Contenedor que agrupa varios componentes (normalmente
botones con imgenes)
! Puede organizarse en filas o columnas
! Por defecto, la barra puede
moverse (siempre que
usemos BorderLayout)
Clase JToolBar
142
! Algunos mtodos tiles
! public JToolBar()
! public JToolBar(int orientacion)
! public JToolBar(String titulo)
! public Component addComponent(Component comp)
! public addSeparator()
! public void setFloatable(boolean b)
! public boolean isFloatable()
Ejercicio
143
! Reharemos el ejercicio de copiar, cortar y pegar (una vez
ms...)
! En lugar de mediante botones o mens, usaremos una Barra de
Herramientas para aadir la funcionalidad
! Permitiremos que la barra de herramientas pueda ser arrastrada
Clase JScrollBar
144
! Permiten desplazarse por contenidos de mayor tamao que el
rea visible
! Normalmente, no se usan
por separado, sino junto con
un JScrollPane
! Algunos mtodos:
! public JScrollBar()
! public JScrollBar(int orientacion, int valor, int visible, int min, int
max)
! public void setOrientation(int orientacion)
Clase JSlider
145
! Componente que permite seleccionar un valor numrico
comprendido entre un mximo y un mnimo deslizando una
barra
! Las etiquetas se nombran con sus
valores numricos (aunque se pueden
personalizar)
! Los nuevos valores pueden recibirse
con un ChangeListener
! Se invoca al mtodo stateChanged()
Clase JSlider
146
! Algunos mtodos tiles
! public JSlider()
! public JSlider(int orientacion, int min, int max, int val_inicial)
! public void setInverted(boolean invertido)
! public void setMajorTickSpacing(int espacio)
! public void setMinorTickSpacing(int espacio)
! public void setPaintTicks(boolean pintar_ticks)
! public void setPaintLabels(boolean pintar_etiquetas)
! public void setLableTable(Dictionnary etiquetas)
Ejercicio
147
! Crear una ventana que contenga una etiqueta coloreada con
unos tamaos horizontal y vertical iniciales
! Aadir dos JSliders, y dos etiquetas, una a la izquierda de cada
slider que digan Tamao horizontal y Tamao vertical
! Cada uno de los sliders debe servir para modificar el tamao
horizontal y vertical, respectivamente
Clase JSpinner
148
! Sirven para elegir un valor entre un rango de valores
! Permiten introducir valores directamente...
! ... y usar los controles para moverse
entre los valores permitidos
! Los valores permitidos para el spinner
son controlados por su modelo asociado
! Podemos usar alguno de los modelos predefinidos o definir un
modelo personalizado
! SpinnerListModel
! SpinnerNumberModel
! SpinnerDateModel
! Los cambios de valor se controlan con ChangeListener
Clase JSpinner
149
! Algunos mtodos tiles
! public JSpinner()
! public JSpinner(SpinnerModel modelo)
! public void setValue(Object valor)
! public Object getValue()
! public Object getNextValue()
! public Object getPreviousValue()
! public SpinnerModel getModel()
Ejercicio
150
! Vamos a crear la pantalla de dos transparencias hacia atrs
! Cada uno de los tres JSpinners tiene que usar un modelo de
datos distinto
! El primero, SpinnerListModel
! El segundo, SpinnerNumberModel
! El tercero, SpinnerDateModel
! Tenemos que asociar a cada modelo un valor mnimo y otro
mximo
Clase JTooltip
151
! Consejos que aparecen al poner el ratn sobre un componente
! Se puede definir con el mtodo setToolTipText de la clase
JComponent
! En componentes con distintas partes (como JTabbedPane)
podemos definir un ToolTip para cada parte
Clase JTooltip
152
! Algunos mtodos tiles
! public void setToolTipText(String texto)
! public String getToolTipText()
! public String getToolTipText(MouseEvent evento)
Clase JSplitPane
153
! Panel que permite situar contenido en dos reas, una encima de
la otra, o a izquierda y derecha
! Mediante el deslizador central, el usuario puede seleccionar
el ancho que va a ocupar
cada una de las partes
! Muchas veces se usa junto
con un JScrollPane
! Se pueden anida varios
JSplitPanes
! El comportamiento del desplazador se controla con los tamaos
mnimos y preferidos de los componentes
Clase JSplitPane
154
! Algunos mtodos tiles
! public JSplitPane()
! public JSplitPane(int orientacion, boolean repintar)
! public JSplitPane(int orientacion, boolean repintar, Component comp1,
Component comp2)
! public void setOrientation(int orientacion)
! JSplitPane.HORIZONTAL_SPLIT, JSplitPane.VERTICAL_SPLIT
! public void setDividerSize(int tamano)
! public void setOneTouchExpandable(boolean expandible)
! public void set[Top|Bottom|Right|Left] Component(Component
comp)
! public void addComponent(Component comp)
Ejercicio
155
! Vamos a rehacer el ejercicio de la seleccin de las imgenes de
los animales
! Usaremos un JSplitPane para dividir la ventana en dos partes
! La parte de la izquierda albergar un JList con la lista de
animales
! En la parte de la derecha pondremos la etiqueta que usaremos
para mostrar la imagen
! Cada vez que seleccionemos un animal distinto de la lista
actualizaremos la imagen de la etiqueta
Clase JTabbedPane
156
! Contenedor que permite gestionar distintos conjuntos de
componentes en el mismo panel
! Podemos seleccionar a qu contenedor aadir los componentes
! Se puede seleccionar dnde situar las pestaas
! Se pueden usar teclas, atajos o el ratn para navegar por las
pestaas
Clase JTabbedPane
157
! Algunos mtodos tiles
! public JTabbedPane()
! public JTabbedPane(int posicion, int layout)
! public void addTab(String titulo, Icon icono, Component comp,
String tooltip)
! public void insertTab(String titulo, Icon icono, Component comp,
String tooltip, int posicion)
! public void remove(Component comp)
! public void removeTabAt(int posicion)
! public void setComponentAt(int posicion, Component comp)
Clase JScrollPane
158
! Contenedor para componentes con barras de desplazamiento
! Se puede establecer el
contenido en el momento de
la construccin o a travs de
su view port
! Podemos seleccionar el
comportamiento de las barras
de desplazamiento
! Se puede personalizar la
decoracin del panel
Clase JScrollPane
159
! Algunos mtodos tiles
! public JScrollPane()
! public JScrollPane(Component comp, int politica_horiz, int
politica_vert)
! public JViewPort getViewport()
! public void setColumnHeaderView(Component comp)
! public void setRowHeaderView(Component comp)
! public void setWheelScrollingEnabled(boolean scroll)
Clase JTable
160
! Nos permite mostrar informacin de forma tabular
! Podemos construir una tabla pasando un Vector/Array con la
cabecera y otro con el contenido en el constructor
! Todas las celdas sern editables
! Todos los tipos de datos se mostrarn por igual (como Strings)
! Para solventarlo se crea (o usa uno de los de por defecto) un
TableModel
Clase JTable
161
! Normalmente, aadiremos la tabla a un contenedor/panel
! Si es un JScrollPane, la cabecera es aadida automticamente
! Si usamos otro panel, hay que aadir la cabecera a mano en la
posicin que deseemos
! Con el mtodo getTable() recuperamos una referencia a la cabecera
! El ancho de una columna se asigna automticamente
! Si la ventana crece, las columnas crecen por igual
! Si cambiamos el ancho de una columna, las de la derecha se ajustan
! El modelo de la tabla es el que nos permite acceder al contenido
! Y tambin registrar el tratamiento de eventos
Clase JTable
162
! Conceptos: Editores y Renderizadores
! Los editores nos permiten aadir contenido a una tabla
! Pueden ser JTextFields o JComboBoxes, por ejemplo
! Los renderizadores determinan cmo se pinta el contenido de un tipo de
celdas
! Pueden personalizarse
! El contenido de la tabla puede ordenarse por columnas
! Para ms informacin:
http://java.sun.com/docs/books/tutorial/uiswing/components/
table.html

Ejercicio
163
! Crear una ventana que contenga una tabla con datos
! Debe ser ordenable por cualquier columna
! Debe admitir la seleccin por filas, con slo una fila activa en
cada momento
! Deben mostrarse los encabezados de cada columna
! Debe permitir hacer scroll en caso de que el contenido no
quepa en la ventana
! La ventana tiene que tener, adems, un botn que, al pulsarlo,
muestre un dilogo con el contenido de esa celda (para
comprobar que efectivamente estamos leyendo los datos de la
tabla)
Clase JFileChooser
164
! Control predefinido para navegar por la estructura de
directorios
! La ventana que muestra es
una venta modal
! Los directorios se recuerdan
entre usos
! Se puede cambiar el
comportamiento para que
permita seleccionar slo ficheros o directorios
! Se puede personalizar la vista y los filtros utilizados
Clase JFileChooser
165
! Algunos mtodos tiles
! public JFileChooser()
! public JFileChooser(String directorio)
! public int showDialog(Component padre, String confirmacion)
! APPROVED_OPTION, CANCEL_OPTION y ERROR_OPTION
! public File getSelectedFile()
! public File[] getSelectedFiles()
! public setFilseSelectionMode(int modo)
! FILES_ONLY, DIRECTORIES_ONLY y FILES_AND_DIRECTORIES
! public void setMultiSelectionEnabled(boolean multiseleccion)
! public void setCurrentDirectory(File directorio)
Ejercicio
166
! Vamos a crear una ventana que contenga un campo de texto
para mostrar informacin (JTextField no editable), un botn y
un grupo de JRadioButtons con tres botones
! El botn, al pulsarlo, debe mostrar un dilogo JFileChooser
! Cuando seleccionemos un fichero o directorio, el nombre de
dicho fichero o directorio tendremos que mostrarlo en el
campo de texto
! Los tres JRadioButtons deben permitir seleccionar si lo que
queremos poder escoger son ficheros, directorios o ambas cosas
Clase JColorChooser
167
! Componente predefinido que permite seleccionar un color de
entre una paleta de colores
! Presenta dos reas
! El rea de seleccin
! El rea de previsualizacin
! Se puede ocultar el rea de
previsualizacin
! Se puede personalizar el rea de
seleccin
Clase JColorChooser
168
! Algunos mtodos tiles
! public JColorChooser()
! public JColorChooser(Color color_inicial)
! public Color showDialog(Component padre, String titulo, Color
color_inicial)
! public void setPreviewPanel(JComponent panel)
! public Color getColor()
! public ColorSelectionModel getSelectionModel() : Permite
acceder al modelo, que es el que genera los eventos de cambio de
color seleccionado
Ejercicio
169
! Tenemos que crear la ventana de dos transparencias atrs
! Est dividida en dos partes
! La superior tiene una etiqueta donde al texto le hemos dado un
color y tambin hemos modificado el color de fondo
! La parte inferior muestra un dilogo de seleccin de color
! Al seleccionar un color en la parte inferior, deberemos cambiar
el color del texto de la etiqueta adecuadamente
Clase JPopUpMenu
170
! Nos permite mostrar mens contextuales al pulsar el botn
derecho sobre un componente
! Hay que controlar los eventos de
ratn sobre los componentes en los
que deseemos habilitarlo
! Usamos un mtodo especial de la
clase SwingUtilities que nos dir si el
click recibido es de botn derecho
! Se compone de los mismos
MenuItems que los mens superiores
Clase JPopUpMenu
171
! Algunos mtodos tiles
! public JPopUpMenu()
! public JMenuItem add(JMenuItem item)
! public JMenuItem add(String item)
! public void addSeparator()
! public void insert(Component item, int pos)
! public void remove(int pos)
! public void removeAll()
! public void show(Component comp, int x, int y)
! Mtodo necesario definido en MouseEvent
! public boolean isPopupTrigger()
Ejercicio
172
! Vamos a extender la ltima versin del editor con opciones de
copiar, cortar y pegar
! Aadiremos la opcin de llevarlo a cabo mediante un
JPopUpMenu que aparecer al hace click con el botn derecho
en cualquiera de las cajas de texto
Clases JDesktopPane y JInternalFrame
173
! Permiten crear aplicaciones multiventana dentro de un mismo
JFrame
! Se instancia JDesktopPane y se aaden tantos JInternalFrames como
deseemos
! A los JInternalFrames hay que darles un
tamao (si no, tendrn tamao cero y no
se vern)
! Si no se especifica una posicin,
aparecern en la posicin (0,0)
! Se aaden componentes como en JFrame
! Hay que hacer visibles los JInternalFrames
! Generan Internal Frames events (que son capturados con
JInternalFrameListeners)
Clases JDesktopPane y JInternalFrame
174
! Algunos mtodos tiles de JDesktopPane
! public JDesktopPane()
! public Component add(Component internal_frame)
! Algunos mtodos tiles de JInternalFrame
! public JInternalFrame(String titulo, boolean redim, boolean
maxim, boolean minim, boolean close)
! public Container getContentPane()
! public void setVisible(boolean visible)
! public void setLocation(int x, int y)
! public void setSize(Dimension tam)
Ejercicio
175
! Hay que crear una ventana que contenga un JDesktopPane
! Aadiremos una barra de men a la ventana principal, con un
men, que nos permita crear nuevos JInternalFrame dentro del
JDesktopPane
! Al crearlos, les daremos una posicin aleatoria dentro del
JDesktopPane
! Tambin les daremos un tamao aleatorio
! No olvidemos hacerlos visibles despus de aadirlos
Clase JProgressBar
176
Clase JLayeredPane
177
Clase JTree
178

También podría gustarte