Mostrar una ventana emergente de JavaFX en Java

Rupam Yadav 12 octubre 2023
Mostrar una ventana emergente de JavaFX en Java

En este artículo, veremos cómo podemos usar uno de los componentes del kit de herramientas JavaFX llamado popup. Como sugiere el nombre, el componente emergente muestra una ventana emergente simple cuando se ejecuta utilizando las funciones de GUI de JavaFX. A continuación se muestran dos ejemplos del uso del componente emergente.

Ventana emergente con texto en Java

Antes de continuar con el programa real, debemos verificar los métodos y clases con el kit de GUI de JavaFX.

  • Stage: la clase de nivel superior en JavaFX extiende la ventana y crea una ventana donde podemos colocar una escena.
  • Escena: una escena JavaFX es otra clase que representa los componentes dados del kit de herramientas JavaFX.
  • Clase de aplicación JavaFX: se utiliza para iniciar la aplicación JavaFX, y la clase que usamos debe extender la clase de la aplicación.

Ahora llegamos al programa; en el siguiente ejemplo, creamos una clase Main y ampliamos la clase Application del paquete JavaFX. Luego llamamos al método abstracto start() de la clase de la aplicación, que es esencial porque se ejecuta cuando se inicia la aplicación.

El método start() toma un solo argumento del tipo Stage, creado automáticamente por el tiempo de ejecución de JavaFX. Como el stage es la ventana principal, establecemos su título usando stage.setTitle(), y para abrir la ventana emergente JavaFX, creamos un objeto del componente Botón.

Para diseñar los componentes dentro de la ventana emergente, usamos un componente de diseño llamado TilePane que muestra sus nodos secundarios como una cuadrícula. A continuación, creamos un objeto del componente Label para mostrar en la ventana emergente.

Creamos un objeto Popup y le añadimos el objeto Label usando el método popup.getContent.add(). Para establecer el fondo de la Label usamos el método setStyle() y pasamos el estilo.

Luego, establecemos el tamaño de la etiqueta usando los métodos setHeight() y setWidth(). Ahora, creamos una clase anónima del controlador de eventos para abrir y cerrar la ventana emergente cuando se hace clic en el botón.

En la clase anónima de tipo EventHandler<ActionEvent>, llamamos a popup.isShowing() y verificamos si la ventana emergente está visible en la pantalla, y si no lo está, la mostramos usando el popup.show() método en el que el objeto stage se pasa como argumento. Para ocultar la ventana emergente, usamos la función hide().

Ahora configuramos el controlador de eventos como una acción del button y agregamos el button al objeto de diseño tilePane usando tilePane.getChildren().add(). Para mostrar todos los componentes que creamos, creamos un objeto Scene y pasamos tilePane y los espacios entre cada cuadrícula.

Finalmente, colocamos el objeto scene en el objeto stage y llamamos al método show() de la clase stage. Por último, llamamos al método launch() de la clase Application con los argumentos de la línea de comando.

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.TilePane;
import javafx.stage.Popup;
import javafx.stage.Stage;

public class Main extends Application {
  public void start(Stage stage) {
    stage.setTitle("A Popup Example");
    Button button = new Button("Click to open a Popup");

    TilePane tilePane = new TilePane();
    Label label = new Label("This is a popup");

    Popup popup = new Popup();

    label.setStyle("-fx-background-color: grey;");
    popup.getContent().add(label);

    label.setMinWidth(100);
    label.setMinHeight(80);

    EventHandler<ActionEvent> actionEventHandler = et -> {
      if (!popup.isShowing()) {
        popup.show(stage);
        button.setText("Click to Hide a Popup");
      } else {
        popup.hide();
        button.setText("Click to open a Popup");
      }
    };

    button.setOnAction(actionEventHandler);
    tilePane.getChildren().add(button);

    Scene scene = new Scene(tilePane, 450, 360);
    stage.setScene(scene);
    stage.show();
  }

  public static void main(String[] args) {
    launch(args);
  }
}

Salida (antes de abrir la ventana emergente):

Ventana emergente Java Javafx

Salida (después de abrir la ventana emergente):

Ventana emergente Java Javafx

Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Artículo relacionado - Java JavaFX