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下載