虽然我可以在不使用FXML的情况下定义ContextMenu,但找不到在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的属性?
答案 0 :(得分:1)
尝试通过contextMenu
属性在相应的Node上下文中定义(无双关语:)
<TextField fx:id="tf">
<contextMenu>
<ContextMenu fx:id="cmTF">
<items>
<MenuItem text="Add"/>
<MenuItem text="Remove"/>
<MenuItem text="Enhance"/>
</items>
</ContextMenu>
</contextMenu>
</TextField>
答案 1 :(得分:1)
尝试一下
runat="server"
<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>