java - 我们如何在 FXML 中定义上下文菜单?

标签 java javafx fxml

虽然我可以在没有 FXML 的情况下定义上下文菜单,但我没有找到用 FXML 定义上下文菜单的好方法:

在源文件中:

ContextMenu contextMenu = new ContextMenu();
contextMenu.getItems().addAll(someMenuItems);
// This runs perfectly

在 FXML 中:

<ContextMenu fx:id="contextMenu">
</ContextMenu>
// This is incorrect in fxml. The Exception of "Unable to coerce javafx.scene.control.ContextMenu to class javafx.scene.Node" is thrown.

<MenuBar fx:id="menuBar">
    //... Some Menu and items could be defined here
</MenuBar>
// This is correct in fxml

我知道 MenuBar 可以工作,因为它扩展了 javafx.scene.control.Control,它是 javafx.scene.Node 的子类,但 ContextMenu 没有。

那么有什么方法可以在 FXML 中类似地定义 ContextMenu 的属性吗?

最佳答案

试试这个

<BorderPane fx:id="borderPane" fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml">
    <fx:define>
        <ContextMenu fx:id="contextMenu">
            <items>
                <MenuItem text="Menu Item"/>
            </items>
        </ContextMenu>
    </fx:define>
</BorderPane>
public class Controller {

    @FXML
    private ContextMenu contextMenu;

    @FXML
    private BorderPane borderPane;

    @FXML
    private void initialize() {
        borderPane.setOnContextMenuRequested(event -> {
            contextMenu.show(borderPane, event.getScreenX(), event.getScreenY());
        });
    }
}

关于java - 我们如何在 FXML 中定义上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394592/

相关文章:

java - 传递动态CPU资源在java中创建kubernetes

java - 无法使用 JDBC 正确查询数据库

java - Java DB 程序上的“下一步”按钮

JavaFX CSS : How to inherit background color from other CSS settings?

video - 如何使用 JavaFX 在 3D 形状上播放视频?

java - 将面板添加到 fxml Pane

java - SpringBoot @WebMvcTest 安全问题

Java FXML TableColumn 不支持 GregorianCalendar

JavaFX 对话框通信

intellij-idea - IntelliJ - 有没有办法将 SceneBuilder 移动到 IDE 的右侧?