如何在JavaFX中将操作侦听器添加到ContextMenu?

上下文菜单是在与应用程序中的UI元素交互时出现的弹出菜单。您可以通过实例化javafx.scene.control.ContextMenu类来创建上下文菜单。

就像菜单一样,在创建上下文菜单之后,需要向其添加MenuItems。您可以使用setContextMenu()方法将ContextMenu设置为javafx.scene.control类的任何对象。

通常,当您在所附控件上“右键单击”时,会出现这些内容菜单。

将动作侦听器添加到ContextMenu

文本菜单类继承的命名属性的OnAction从javafx.scene.control.ButtonBase类,这是该类型OBJECTPROPERTY <事件处理<ActionEvent的>>的。该属性表示每当您按下按钮时调用的操作。您可以使用setOnAction()方法将值设置为此属性。

要在上下文菜单上设置操作,您需要-

  • 实例化ContextMenu类。

  • 创建一个MenuItem对象,并将它们添加到菜单中。

  • 调用菜单项对象的setOnAction()方法。

对于setOnAction()方法,您需要传递一个EventHandler <ActionEvent>对象,该对象包装要在其中执行操作的代码。

示例

以下JavaFX示例包含一个按钮和一个调整按钮大小的滑块。在“右键单击”上,按钮显示两个选项-防止调整大小和允许调整大小。

如果选择“防止调整大小”选项,则该按钮将设置为默认大小,并且无法进一步调整大小。如果再次选择允许调整大小,则可以调整大小。

import javafx.application.Application;

import javafx.beans.value.ChangeListener;

import javafx.beans.value.ObservableValue;

import javafx.event.ActionEvent;

import javafx.geometry.Insets;

import javafx.geometry.Orientation;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.control.ContextMenu;

import javafx.scene.control.Label;

import javafx.scene.control.MenuItem;

import javafx.scene.control.Slider;

import javafx.scene.layout.BorderPane;

import javafx.scene.layout.VBox;

import javafx.stage.Stage;

public class ContextMenu_Action extends Application {

   public void start(Stage stage) {

      //创建一个按钮

      Button button = new Button("Hello");

      button.setPrefSize(60, 60);

      //创建一个滑块来调整按钮的大小

      Slider slider = new Slider(40, 200, 60);

      //将其方向设置为“水平”

      slider.setPrefHeight(180);

      slider.setOrientation(Orientation.VERTICAL);

      slider.setShowTickLabels(true);

      slider.setShowTickMarks(true);

      slider.setMajorTickUnit(40);

      slider.setBlockIncrement(20);

      slider.valueProperty().addListener(new ChangeListener<Number>() {

         public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){

            button.setPrefSize((double)newValue, (double)newValue);

         }

      });

      //创建上下文菜单

      ContextMenu contextMenu = new ContextMenu();

      //为上下文菜单创建菜单项

      MenuItem item1 = new MenuItem("Prevent Resizing");

      MenuItem item2 = new MenuItem("Allow Resizing");

      contextMenu.getItems().addAll(item1, item2);

      //将ContextMenuItem设置为按钮

      button.setContextMenu(contextMenu);

      //将操作设置为上下文菜单项

      item1.setOnAction((ActionEvent e) -> {

         button.setMinWidth(60);

         button.setPrefWidth(60);

         button.setMaxWidth(60);

         button.setMinHeight(60);

         button.setMaxHeight(60);

         button.setPrefHeight(60);

      });

      item2.setOnAction((ActionEvent e) -> {

         button.setPrefHeight(60);

         button.setPrefWidth(60);

         button.setMinWidth(Button.USE_PREF_SIZE);

         button.setMaxWidth(Button.USE_PREF_SIZE);

         button.setMinHeight(Button.USE_PREF_SIZE);

         button.setMaxHeight(Button.USE_PREF_SIZE);

      });

      //创建窗格

      BorderPane pane = new BorderPane();

      pane.setCenter(button);

      pane.setLeft(new VBox(new Label("Button Reize"), slider));

      pane.setPadding(new Insets(10, 10, 10, 10));

      //准备场景

      Scene scene = new Scene(pane, 595, 250);

      stage.setTitle("Context Menu");

      stage.setScene(scene);

      stage.show();

   }

   public static void main(String args[]){

      launch(args);

   }

}

输出结果


以上是 如何在JavaFX中将操作侦听器添加到ContextMenu? 的全部内容, 来源链接: utcz.com/z/322137.html

回到顶部