首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TreeItem是否支持拖放?

TreeItem是否支持拖放?
EN

Stack Overflow用户
提问于 2012-06-28 18:39:05
回答 2查看 7.2K关注 0票数 7

我目前正在使用一个表示文件系统的JavaFx-2的TreeView

我想启用drag and drop来允许移动操作,但看起来TreeItem不包括拖动事件侦听器。我只能在吸引人的TreeView对象上实现拖放,但它不适用于子项。

我是不是遗漏了什么,或者TreeItems还不支持拖放事件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-09 23:44:30

由Csh在甲骨文论坛上回答的问题:https://forums.oracle.com/forums/message.jspa?messageID=10426066#10426066

你必须在TreeCell上实现拖放。

像这样写一个CellFactory:

代码语言:javascript
复制
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;
        }
    });

如果他想宣称自己的声誉或在他的解决方案中添加信息,我将更改此答案。

票数 7
EN

Stack Overflow用户

发布于 2014-03-20 04:01:46

@Timst的答案是正确的,但你应该更改"updateItem“方法,因为在上面的情况下,你将无法设置"TreeItem”的图形,并且树折叠将无法正常工作(不会清除subNodes中的文本)。

只需将方法更改为:

代码语言:javascript
复制
@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);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11242847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档