被拖拽的TreeItem支持?(Is drag and drop supported by Tree

2019-07-30 04:06发布

我目前正在与一个JavaFX-2的工作的TreeView表示文件系统。

我想启用拖放允许移动操作,但它看起来像TreeItem不包括拖动事件侦听器。 我才能够实现拖动和englobing TreeView的对象上下降,但它并没有分项工作。

我失去了一些东西,或者拖放事件不支持TreeItems了吗?

Answer 1:

问题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;
        }
    });

如果他想要求他的名誉,或者他的解决方案中添加信息,我会改变这个答案。



Answer 2:

通过@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);
    }
}


文章来源: Is drag and drop supported by TreeItem?