我目前正在使用一个表示文件系统的JavaFx-2的TreeView。
我想启用drag and drop来允许移动操作,但看起来TreeItem不包括拖动事件侦听器。我只能在吸引人的TreeView对象上实现拖放,但它不适用于子项。
我是不是遗漏了什么,或者TreeItems还不支持拖放事件?
发布于 2012-07-09 23:44:30
由Csh在甲骨文论坛上回答的问题: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;
}
});如果他想宣称自己的声誉或在他的解决方案中添加信息,我将更改此答案。
发布于 2014-03-20 04:01:46
@Timst的答案是正确的,但你应该更改"updateItem“方法,因为在上面的情况下,你将无法设置"TreeItem”的图形,并且树折叠将无法正常工作(不会清除subNodes中的文本)。
只需将方法更改为:
@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);
}
}https://stackoverflow.com/questions/11242847
复制相似问题