Creación y uso de componentes
gráficos
De la misma forma que podemos diseñar una interfaz gráfica en una sola clase, es
recomendable dividir las diferentes secciones (componentes) de una GUI en diferentes
clases. De este modo será más fácil reutilizar algunos componentes en interfaces gráficas
de otras aplicaciones, además de tener clases más pequeñas y, por lo tanto, más
escalables o más fáciles de depurar.
En el siguiente bloque se muestra el uso de ciertos componentes ya existentes en la API
de Java, y también se mostrará cómo crear nuestros propios componentes, e incorporarlos
a nuestra interfaz.
Cuadros de dialogo
Un tipo de componentes muy útil en nuestra interfaz gráfica son los cuadros de dialogo. Un
cuadro de diálogo es toda aquella ventana que me muestra una información y tiene botones
a través de los cuales se da una respuesta pulsando un botón (Aceptar, Cancelar, Omitir,
Guardar, Cargar, etc).
JFileChooser
La clase JFileChooser permite crear cuadros
de diálogo para seleccionar ficheros, por
ejemplo para las operaciones de guardar o
abrir ficheros.Para crear una instancia
usaremos:
JFileChooser selector = new JFileChooser();
int opcion = selector.showOpenDialog(null);
if(opcion == JFileChooser.APPROVE_OPTION){ //Ha pulsado “Aceptar”
File fichero = selector.getSelectedFile()
// Procesamos fichero
}
Métodos principales:
▪ showOpenDialog(null) : Abre un cuadro de dialogo de apertura de fichero.
▪ showSaveDialog(null) : Abre un cuadro de dialogo de guardado de fichero.
▪ setCurrentDirectory(File ruta) : Establece la ruta en la que se abre el
cuadro de dialogo.
▪ getSelectedFile() : Devuelve un objeto File con el fichero seleccionado.
Referencias: https://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html
JOptionPane
La clase JOptionPane posee una serie de métodos estáticos mediante los cuales puede
mostrar pequeños cuadros de dialogo genéricos. Me pueden servir para mostrar un
mensaje, pedir un dato, pedir que pulse un botón, etc. Los métodos más útiles se detallan a
continuación:
Mostrar Mensajes
El método showMessageDialog() recibe como mínimo 2 parámetros, el objeto del que
depende y el mensaje.
El primer parámetro puede ser null y siempre se mostrará sobre la ventana que lo lanza. Si
se indican más parámetros se puede modificar el título de la ventana y el icono que muestra.
JOptionPane.showMessageDialog(null, "Tu programa te saluda");
También podemos indicarle distinta finalidad al cuadro de dialogo:
//Icono Warning
JOptionPane.showMessageDialog(null,"Mensaje", "Titulo",
JOptionPane.WARNING_MESSAGE);
//Icono Error
JOptionPane.showMessageDialog(null,"Mensaje", "Titulo",
JOptionPane.ERROR_MESSAGE);
//Icono Personalizado
JOptionPane.showMessageDialog(null,"Mensaje", "Titulo",
JOptionPane.INFORMATION_MESSAGE, icono);
Introducir texto
Si lo que queremos es pedir datos al usuario mediante
una ventana de dialogo, usaremos el método
showInputDialog().
El método recibe el objeto padre (puede ser null) y un String con el mensaje que queremos
mostrar. El texto que introduce el usuario es devuelto como tipo String por este método:
String nombre = JOptionPane.showInputDialog(null, "Introduce tu nombre");
Pedir confirmación
Si lo que queremos es pedir la confirmación del usuario para realizar algo, podemos usar el
método showConfirmDialog().
Este método devuelve un int: 0,1 ó 2, dependiendo de la
respuesta del usuario. (0 = Si; 1 = No; 2 = Cancelar)
Recibe como parámetro la referencia a la ventana padre
(podemos indicar null) y el String con el mensaje a
mostrar:
int respuesta = JOptionPane.showConfirmDialog(null,"¿Desea eliminar este
elemento?");
Seleccionar una opción
Con el método showOptionDialog() podemos ofrecer
una serie de botones para seleccionar una opción en
concreto.
Es el método que más parámetros recibe, pero su uso es
igual de sencillo. Debemos indicarle un array con las
opciones que queremos que ofrezca.
String[] opciones = {"Opcion A", "Opcion B", "Opcion C", "Opcion D"};
int respuesta = JOptionPane.showOptionDialog(frame, "Es necesario que
seleccione una opcion",
"Titulo", JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null,
opciones, null);
JColorChooser
Además del cuadro de dialogo de
tipo JFileChooser para
seleccionar ficheros, Java ofrece
otra clase con un funcionamiento
similar: la clase JColorChooser.
En este caso este cuadro de
dialogo devuelve un objeto de
tipo Color que representa el
color elegido.
Para mostrarlo usamos el
siguiente método estático que
recibe 3 parámetros:
JColorChooser.showDialog(componente, titulo, colorInicial)
▪ componente: el componente padre sobre el que se muestra: un JFrame, un
JPanel. Si indicamos null se muestra encima de la ventana anterior.
▪ titulo: un String con el título del cuadro de dialogo que se despliega.
▪ colorInicial: un objeto Color, con el color seleccionado por defecto. Si indicamos
null será el color blanco.
JLabel label = new JLabel("Texto en color");
//Selecciono un color del cuadro de dialogo
Color colorSeleccionado = JColorChooser.showDialog(contentPane, "Elige un
color", Color.BLACK);
//Cambio el color del texto de la etiqueta
label.setForeground(colorSeleccionado);
JDialog
Representan a las ventanas secundarias que tendrá nuestra aplicación. No son elementos
que contiene la paleta, sino que los crearemos en una clase nueva como contenedor de alto
nivel de tipo JDialog. Posteriormente serán llamados desde nuestra aplicación ante un
evento (p.e. pulsar un botón). Se crean de la misma forma que una ventana basada en un
JFrame, y su clase será instanciada desde algún método de la ventana principal.
Los elementos JFileChooser o JOptionPane son instancias de JDialog.
La peculiaridad que tienen es que permiten ser definidas como ventanas modales. Esto
quiere decir que permiten bloquear el uso y acceso al resto de la aplicación mientras están
abiertos.
setModal(true);
Crear un JDialog a medida
Para crear un cuadro de diálogo accedo al menú de WindowBuilder y selecciono crear un
elemento JDialog. Automáticamente se me genera una clase con el código referente a la
creación de dicho diálogo. Se crea un cuadro genérico con dos botones (Aceptar, Cancelar).
Debemos añadir los listeners a dichos botones.
Puedo añadir todos los componentes que quiera del mismo modo que a un JFrame (Ventana
principal del programa).
Posteriormente puedo crear mi cuadro de diálogo (JDialog), llamando a su constructor:
MiDialogo cuadro = MiDialogo();
Si necesito que mi cuadro reciba algún tipo de datos de la ventana principal, puedo pasarlo
como atributo al constructor:
MiDialogo cuadro = MiDialogo(listaAlumnos);