Cómo mostrar diferentes cuadros de diálogo (error, warning, información, confirmación) en JavaFX. Código fuente de ejemplo que incluye la creación de una escena con varios botones y su código asociado. Mostramos un botón con imagen en JavaFX.
- Requisitos para realizar aplicación JavaFX.
- Ejemplo de aplicación de escritorio JavaFX que muestra una ventana con botones para cuadros de diálogo.
- Aplicación de ejemplo que muestra cuadros de diálogo en JavaFX en funcionamiento.
Requisitos para realizar aplicación JavaFX
En nuestro caso usaremos el IDE IntelliJ IDEA, pero es válido cualquier otro (Eclipse, NetBeans, etc.), incluso desde un editor de texto plano (notepad, vi, nano, notepad++, etc.).
Únicamente necesitaremos un IDE o un editor y el compilador de Java (que suele venir con los IDE) o bien lo instalaremos descargándolo desde su web oficial.
Ejemplo de aplicación de escritorio JavaFX que muestra una ventana con botones para cuadros de diálogo
A continuación mostramos el código fuente completo de la aplicación en JavaFX que muestra una ventana en Windows/Linux/macOS con cinco botones, cada uno con su código asociado. Cada botón, al pulsarlo, ejecuta el código que muestra un cuadro de diálogo diferente: información con encabezado, información sin encabezado, warning (aviso), error y confirmación (aceptar/cancelar):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
package CuadrosDialogo; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import java.io.File; import java.util.Optional; public class Main extends Application { @Override public void start(Stage escenarioPrincipal) { escenarioPrincipal.setTitle("ProyectoA - Diálogos en JavaFX..."); //Botón para diálogo de información con encabezado //Comprobamos que existe el fichero de imagen para el fichero //Si no existe la carga de la aplicación daría error String imagen = System.getProperty("user.dir") + System.getProperty("file.separator") + "ok.png"; System.out.println(imagen); File ficheroImagen = new File(imagen); Button btDialogoInfoEncabezado; if (ficheroImagen.exists()) { //Si existe la imagen mostramos un botón con imagen, a modo de ejemplo File ficheroImagenBoton = new File(imagen); Image imagenParaBoton = new Image(ficheroImagenBoton.toURI().toString()); btDialogoInfoEncabezado = new Button("Información encabezado", new ImageView(imagenParaBoton)); } else { //En caso de no existir la imagen mostramos un botón sin imagen btDialogoInfoEncabezado = new Button("Información encabezado"); } btDialogoInfoEncabezado.setPrefWidth(230); btDialogoInfoEncabezado.setOnAction(e -> mostrarDialogoInformacionCEncabezado("Texto del mensaje", "Encabezado del mensaje")); //Botón para diálogo de información sin encabezado //Mostramos un botón diferente al anterior, sin imagen Button btDialogoInfoSinEncabezado = new Button("Información sin encabezado"); btDialogoInfoSinEncabezado.setOnAction(e -> mostrarDialogoInformacionSEncabezado("Diálogo sin encabezado")); btDialogoInfoSinEncabezado.setPrefWidth(230); //Botón para diálogo de aviso (warning) sin encabezado Button btDialogoAviso = new Button("Aviso"); btDialogoAviso.setOnAction(e -> mostrarDialogoAviso("Este es el mensaje de aviso")); btDialogoAviso.setPrefWidth(230); //Botón para diálogo de error sin encabezado Button btDialogoError = new Button("Error"); btDialogoError.setOnAction(e -> mostrarDialogoError("Este es el mensaje de error")); btDialogoError.setPrefWidth(230); //Botón para diálogo de confirmación Button btDialogoConfirmacion = new Button("Confirmación"); btDialogoConfirmacion.setOnAction(e -> mostrarDialogoConfirmacion("Este es el mensaje de confirmación")); btDialogoConfirmacion.setPrefWidth(230); //Creamos un label informativo para mostrar antes de los botones Label lbInfo = new Label("Pulse en cualquier botón para mostrar un cuadro de diálogo diferente:"); //Mostramos el label y los botones en un GridPane GridPane gridBotones; gridBotones = new GridPane(); gridBotones.setVgap(10); gridBotones.setHgap(10); gridBotones.add(lbInfo, 0, 0); gridBotones.add(btDialogoInfoEncabezado, 0, 1); gridBotones.add(btDialogoInfoSinEncabezado, 1, 1); gridBotones.add(btDialogoAviso, 0, 2); gridBotones.add(btDialogoError, 1, 2); gridBotones.add(btDialogoConfirmacion, 0, 3); //Mostramos el GridPane en la escena (Scene) Scene escenaPrincipal = new Scene(gridBotones,720,180); escenarioPrincipal.setScene(escenaPrincipal); escenarioPrincipal.centerOnScreen(); escenarioPrincipal.show(); } //Cuadro de diálogo de información con encabezado public void mostrarDialogoInformacionCEncabezado(String mensaje, String encabezado) { Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("Diálogo de información..."); alert.setHeaderText(encabezado); alert.setContentText(mensaje); alert.showAndWait(); } //Cuadro de diálogo de información sin encabezado public void mostrarDialogoInformacionSEncabezado(String mensaje) { Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("Diálogo de información..."); alert.setHeaderText(null); alert.setContentText(mensaje); alert.showAndWait(); } //Cuadro de diálogo de warning public void mostrarDialogoAviso(String mensaje) { Alert alert = new Alert(Alert.AlertType.WARNING); alert.setTitle("Diálogo de aviso..."); alert.setHeaderText(null); alert.setContentText(mensaje); alert.showAndWait(); } //Cuadro de diálogo de error public void mostrarDialogoError(String mensaje) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Diálogo de error..."); alert.setHeaderText(null); alert.setContentText(mensaje); alert.showAndWait(); } //Cuadro de diálogo de confirmación public void mostrarDialogoConfirmacion(String mensaje) { Alert alert = new Alert(Alert.AlertType.CONFIRMATION); alert.setTitle("Diálogo de confirmación..."); alert.setHeaderText(null); alert.setContentText(mensaje); Optional<ButtonType> resultado = alert.showAndWait(); if (resultado.isPresent()) { if (resultado.get() == ButtonType.OK) { mostrarDialogoInformacionSEncabezado("Ha pulsado el botón Aceptar"); } else { mostrarDialogoInformacionSEncabezado("Ha pulsado el botón Cancelar"); } } } public static void main(String[] args) { launch(args); } } |
Aplicación de ejemplo que muestra cuadros de diálogo en JavaFX en funcionamiento
Compilando la aplicación anterior en IntelliJ IDEA, pulsando en el botón «Run…»:
Nos mostrará una ventana Windows/Linux/macOS. Pulsando en el primer botón «Información encabezado»:
Nos mostrará un cuadro de diálogo de información con título, encabezado, texto y un botón «Aceptar»:
Para el botón «Información sin encabezado» mostrará un cuadro de diálogo como el anterior, pero sin el encabezado del mensaje:
Para el botón «Aviso», mostrará un cuadro de diálogo con el icono típico de aviso:
Para el botón «Error», mostrará un cuadro de diálogo con el icono típico de error:
Y para el botón de «Confirmación» monstrará un cuadro de diálogo con dos botones: «Aceptar» y «Cancelar». La aplicación sabrá qué botón ha pulsado el usuario para obrar en consecuencia: