I did not find any simple approach so I had to invent own :-]
package test; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; //custom implementation of TreeView - but same principle should //work on instance of TreeView without inheritance public class ObjectsTree extends TreeView<MyNode>{ //custom context menu that can create proper item for selected item //again, custom class is not necessary you can do it on //instance of ContextMenu private DynamicContextMenu menu = new DynamicContextMenu(); public ObjectsTree() { ... addEventHandler(MouseEvent.MOUSE_RELEASED, e->{ if (e.getButton()==MouseButton.SECONDARY) { TreeItem<MyNode> selected = getSelectionModel().getSelectedItem(); //item is selected - this prevents fail when clicking on empty space if (selected!=null) { //open context menu on current screen position openContextMenu(selected, e.getScreenX(), e.getScreenY()); } } else { //any other click cause hiding menu menu.hide(); } }); ... } private void openContextMenu(TreeItem<ObjectsTreeNode> item, double x, double y) { //custom method that update menu items menu.setContext(item.getValue()); //show menu menu.show(this, x, y); } }