javafx 实现menu的点击事件
javafx Menu默认的点击事件是作用于它的子菜单MenuItem身上的,如果要实现它自己的点击事件,需要使用它的graphic属性。
例如:如下图有三个菜单,分别是文件、编辑、关于,文件和编辑都有子菜单,文件和编辑菜单的默认点击效果是展示它们各自的子菜单。
如果想点击关于菜单让它直接弹出一个对话框,则可以通过以下代码进行修改
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下载