Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们如何在FXML中定义上下文菜单?_Java_Javafx_Fxml - Fatal编程技术网

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

Java 我们如何在FXML中定义上下文菜单?,java,javafx,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

虽然我可以在没有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

//这在fxml中是不正确的。抛出异常“无法将javafx.scene.control.ContextMenu强制为类javafx.scene.Node”。
//... 这里可以定义一些菜单和项目
//这在fxml中是正确的
我理解MenuBar之所以有效,是因为它扩展了javafx.scene.control.control,后者是javafx.scene.Node的一个子类,但ContextMenu没有


那么,有没有办法在FXML中类似地定义ContextMenu的属性呢?

尝试通过
ContextMenu
属性在相应的节点上下文中定义它(没有双关语:):

<TextField fx:id="tf">
    <contextMenu>
        <ContextMenu fx:id="cmTF">
            <items>
                <MenuItem text="Add"/>
                <MenuItem text="Remove"/>
                <MenuItem text="Enhance"/>
            </items>
        </ContextMenu>
    </contextMenu>
</TextField>

试试这个

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

我知道有些人喜欢手动编写FXML而不是使用Scene Builder,但如果不知道如何手动执行某些操作,则只需使用Scene Builder来完成该部分,然后查看FXML是如何生成的。谢谢!我没有注意到contextMenu实际上是节点内部的一个属性!
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());
        });
    }
}