javafx 實現Menu的點擊事件

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章