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:
- ContextMenu() : crea un nuevo menú contextual vacío.
- 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:
- 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:
- 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