我目前正在与一个JavaFX-2的工作的TreeView表示文件系统。
我想启用拖放允许移动操作,但它看起来像TreeItem不包括拖动事件侦听器。 我才能够实现拖动和englobing TreeView的对象上下降,但它并没有分项工作。
我失去了一些东西,或者拖放事件不支持TreeItems了吗?
我目前正在与一个JavaFX-2的工作的TreeView表示文件系统。
我想启用拖放允许移动操作,但它看起来像TreeItem不包括拖动事件侦听器。 我才能够实现拖动和englobing TreeView的对象上下降,但它并没有分项工作。
我失去了一些东西,或者拖放事件不支持TreeItems了吗?
问题Csh的上的Oracle论坛回答: https://forums.oracle.com/forums/message.jspa?messageID=10426066#10426066
你必须落实在TreeCell下降拖累。
写这样的CellFactory:
TreeView<String> treeView = new TreeView<String>();
treeView.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {
@Override
public TreeCell<String> call(TreeView<String> stringTreeView) {
TreeCell<String> treeCell = new TreeCell<String>() {
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item);
}
}
};
treeCell.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
}
});
return treeCell;
}
});
如果他想要求他的名誉,或者他的解决方案中添加信息,我会改变这个答案。
通过@Timst的答案是正确的,但你应该改变“的updateItem”方法的原因在上述情况下,你将无法设置“TreeItem”的图形和塌树将无法正常(正常工作时,不会清除在子节点文本)。
只是改变了方法:
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (!empty && item != null) {
setText(item);
setGraphic(getTreeItem().getGraphic());
}else{
setText(null);
setGraphic(null);
}
}