您的代码的上下文不是很清楚:这是在事件处理程序内部吗?如果是这样,它的事件处理程序有什么用?如果不是,那是什么event
在开幕式上if
陈述?
您提供的两个链接非常复杂;在 JavaFX 中(与 Swing 不同),您应该只考虑为相当高级的用例对现有 Node 类进行子类化。您不需要这种复杂程度来创建弹出菜单。
创建弹出菜单的最简单方法是Control
(或子类);你只需要创建一个ContextMenu
, add MenuItem
s 到它,并将其设置为contextMenu
由您掌控:
TextField textField = new TextField("Type Something"); // we will add a popup menu to this text field
final ContextMenu contextMenu = new ContextMenu();
MenuItem cut = new MenuItem("Cut");
MenuItem copy = new MenuItem("Copy");
MenuItem paste = new MenuItem("Paste");
contextMenu.getItems().addAll(cut, copy, paste);
cut.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Cut...");
}
});
// ...
textField.setContextMenu(contextMenu);
如果你想使用ContextMenu
在不是一个节点上Control
(a Pane
or a Shape
,例如),你没有setContextMenu(...)
方法,所以你只需要多做一点工作:
final AnchorPane pane = new AnchorPane();
// fill pane with nodes, etc
// create context menu and menu items as above
pane.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.isSecondaryButtonDown()) {
contextMenu.show(pane, event.getScreenX(), event.getScreenY());
}
}
});
See the Javadocs http://docs.oracle.com/javafx/2/api/javafx/scene/control/ContextMenu.html for ContextMenu
or the tutorial http://docs.oracle.com/javafx/2/ui_controls/menu_controls.htm#sthref209更多细节。