javafx 实现menu的点击事件

javafx Menu默认的点击事件是作用于它的子菜单MenuItem身上的,如果要实现它自己的点击事件,需要使用它的graphic属性。

例如:如下图有三个菜单,分别是文件、编辑、关于,文件和编辑都有子菜单,文件和编辑菜单的默认点击效果是展示它们各自的子菜单。

可点击的java列表 java菜单栏点击事件_javafx


如果想点击关于菜单让它直接弹出一个对话框,则可以通过以下代码进行修改

1.fxml文件的Controller类

package sample;

import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;

import java.net.URL;
import java.util.ResourceBundle;

public class Controller implements Initializable {

    @FXML
    private MenuBar menuBar;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        //新建一个菜单
        Menu about = new Menu();
        //新建一个标签
        Label label = new Label("关于");
        //给标签绑定鼠标点击事件
        label.setOnMouseClicked(event -> {
            String msg = "您点击了‘关于'菜单";
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("提示");
            alert.setContentText(msg);
            alert.show();
        });
        //将标签设置到menu的graphic属性当中
        about.setGraphic(label);
        menuBar.getMenus().add(about);
    }

    @FXML
    protected void action(Event event) {
        MenuItem item = (MenuItem) event.getTarget();
        String msg = "您点击了‘" + item.getText() + "'菜单";
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle("提示");
        alert.setContentText(msg);
        alert.show();
    }
}

2.fxml代码

<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuItem?>
<GridPane fx:controller="sample.Controller"
          xmlns:fx="http://javafx.com/fxml" alignment="TOP_LEFT" hgap="10" vgap="10">
    <MenuBar fx:id="menuBar">
        <!-- 设置action实际上是作用于它的MenuItem身上的 -->
        <Menu text="文件" onAction="#action">
            <items>
                <MenuItem text="新建" />
                <MenuItem text="保存" />
                <MenuItem text="关闭" />
            </items>
        </Menu>
        <Menu text="编辑" onAction="#action">
            <items>
                <MenuItem text="查看" />
                <MenuItem text="复制" />
                <MenuItem text="粘贴" />
            </items>
        </Menu>
    </MenuBar>
</GridPane>

3.源码请前往https://gitee.com/ly-lp/java-fx.git下载