我的域模型由需要在树视图中列出的多种类型的对象组成,我们将它们称为A和B.当在树视图中选择时,这些类型中的每一种都需要执行不同的操作。 我所做的就是:
为他们两个人创建了一个接口来实现:
public interface ITVItem
{
public String toString();
public void HandleClick();
}
public class A implements ITVItem
{
@Override
public void HandleClick()
{
//Do something
}
@Override
public String toString()
{
return "Item type A";
}
}
public class B implements ITVItem
{
@Override
public void HandleClick()
{
//Do something different
}
@Override
public String toString()
{
return "Item type B";
}
}
树形视图的填充方式如下:
TreeItem<ITVItem> tvItem= new TreeItem<ITVItem> (new A());
rootNode.getChildren().add(target);
treeView.setRoot(rootNode);
现在,当用户点击一个项目时,我会像这样处理它:
@FXML
private void SelectionChanged(MouseEvent event)
{
Node node = event.getPickResult().getIntersectedNode();
// Accept clicks only on node cells, and not on empty spaces of the TreeView
if (node instanceof Text || (node instanceof TreeCell && ((TreeCell) node).getText() != null))
{
tVMain.getSelectionModel().getSelectedItem());
ITVItem tvItem = ((ITVItem) ((TreeItem) tVMain.getSelectionModel().getSelectedItem()).getValue());
tvItem.HandleClick();
}
}
接下来我需要的是为用户右键单击时显示每个域对象类型(A和B)的自定义上下文菜单。我该怎么做?