JavaFX | Menú contextual con ejemplos

ContextMenu es parte de la biblioteca JavaFX. ContextMenu se puede asociar con controles como etiquetas, campos de texto, etc. El menú contextual se activa al hacer clic derecho sobre los controles asociados. Muestra una ventana emergente que contiene varios elementos de menú o submenú.

Los constructores de la clase son:

  1. ContextMenu() : crea un nuevo menú contextual vacío.
  2. ContextMenu(MenuItem… i) : crea un menú contextual que contiene los elementos del menú.

Métodos comúnmente utilizados:

método explicación
getItems() devuelve los elementos del menú contextual
getOnAction() devuelve el valor de la propiedad OnAction
ocultar() oculta el menú contextual
setOnAction(EventHandler v) establece el valor de la propiedad onAction
show(Node a, doble X, doble Y) muestra el menú contextual en una posición específica de la pantalla

Los siguientes programas ilustran el uso de ContextMenu:

  1. Programa para crear un menú contextual y agregarlo a la etiqueta : se creará un menú contextual con el nombre ‘contextMenu’ y 3 elementos de menú: elemento de menú 1, elemento de menú 2, elemento de menú 3 se agregarán al menú contextoMenu y el menú contextoMenu se asociará con una etiqueta ‘etiqueta ‘. La etiqueta se creará dentro de una escena, que a su vez se alojará dentro de un escenario. La función setTitle() se utiliza para proporcionar título al escenario. Luego se crea un VBox, en el que se llama al método addChildren() para adjuntar la barra de menú dentro de la escena. Finalmente, se llama al método show() para mostrar los resultados finales.

    // Program to create a context menu and add it to label
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.*;
    import javafx.scene.layout.*;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.collections.*;
    import javafx.stage.Stage;
    import javafx.scene.text.Text.*;
    import javafx.scene.paint.*;
    import javafx.scene.text.*;
    public class contextMenu_1 extends Application {
        // labels
        Label l;
      
        // launch the application
        public void start(Stage stage)
        {
            // set title for the stage
            stage.setTitle("creating contextMenu ");
      
            // create a label
            Label label1 = new Label("This is a ContextMenu example ");
      
            // create a menu
            ContextMenu contextMenu = new ContextMenu();
      
            // create menuitems
            MenuItem menuItem1 = new MenuItem("menu item 1");
            MenuItem menuItem2 = new MenuItem("menu item 2");
            MenuItem menuItem3 = new MenuItem("menu item 3");
      
            // add menu items to menu
            contextMenu.getItems().add(menuItem1);
            contextMenu.getItems().add(menuItem2);
            contextMenu.getItems().add(menuItem3);
      
            // create a tilepane
            TilePane tilePane = new TilePane(label1);
      
            // setContextMenu to label
            label1.setContextMenu(contextMenu);
      
            // create a scene
            Scene sc = new Scene(tilePane, 200, 200);
      
            // set the scene
            stage.setScene(sc);
      
            stage.show();
        }
      
        public static void main(String args[])
        {
            // launch the application
            launch(args);
        }
    }

    Producción:

  2. Programa para crear un menú contextual y agregarlo a la etiqueta y asociar el menú contextual con el detector de eventos de ventana: Se creará un menú contextual con el nombre contextMenu y se agregarán 3 elementos de menú menuItem1, menuItem2, menuItem3 al menú contextMenu y contextMenu se asociará con una etiqueta l. La etiqueta se creará dentro de una escena, que a su vez se alojará dentro de un escenario. La función setTitle() se utiliza para proporcionar título al escenario. Luego se crea un VBox, en el que se llama al método addChildren() para adjuntar la barra de menú dentro de la escena. Finalmente, se llama al método show() para mostrar los resultados finales. Se creará un evento de ventana que manejará los eventos de ventana del menú contextual y mostrará el estado del menú contextual mediante una etiqueta ‘etiqueta’. El evento de la ventana se asociará con la etiqueta utilizando las funciones setOnHiding() y setOnShowing().

    // Program to create a context menu and add it to label
    // and associate the context menu with window event listener
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.*;
    import javafx.scene.layout.*;
    import javafx.stage.WindowEvent;
    import javafx.event.EventHandler;
    import javafx.collections.*;
    import javafx.stage.Stage;
    import javafx.scene.text.Text.*;
    import javafx.scene.paint.*;
    import javafx.scene.text.*;
    public class contextMenu extends Application {
        // labels
        Label label;
      
        // launch the application
        public void start(Stage stage)
        {
            // set title for the stage
            stage.setTitle("creating contextMenu ");
      
            // create a label
            Label label1 = new Label("This is a ContextMenu example ");
      
            // create a menu
            ContextMenu contextMenu = new ContextMenu();
      
            // create menuitems
            MenuItem menuItem1 = new MenuItem("menu item 1");
            MenuItem menuItem2 = new MenuItem("menu item 2");
            MenuItem menuItem3 = new MenuItem("menu item 3");
      
            // add menu items to menu
            contextMenu.getItems().add(menuItem1);
            contextMenu.getItems().add(menuItem2);
            contextMenu.getItems().add(menuItem3);
      
            // label to display events
            Label label = new Label("context menu hidden");
      
            // create window event
            EventHandler<WindowEvent> event = new EventHandler<WindowEvent>() {
                public void handle(WindowEvent e)
                {
                    if (contextMenu.isShowing())
                        label.setText("context menu showing");
                    else
                        label.setText("context menu hidden");
                }
            };
      
            // add event
            contextMenu.setOnShowing(event);
            contextMenu.setOnHiding(event);
      
            // create a tilepane
            TilePane tilePane = new TilePane(label1);
      
            tilePane.getChildren().add(label);
      
            // setContextMenu to label
            label.setContextMenu(contextMenu);
      
            // create a scene
            Scene sc = new Scene(tilePane, 200, 200);
      
            // set the scene
            stage.setScene(sc);
      
            stage.show();
        }
      
        public static void main(String args[])
        {
            // launch the application
            launch(args);
        }
    }

    Producción:

Nota: es posible que los programas anteriores no se ejecuten en un compilador en línea; utilice un IDE sin conexión.

Referencia: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ContextMenu.html

Publicación traducida automáticamente

Artículo escrito por andrew1234 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *