Is drag and drop supported by TreeItem?


Question

I'm currently working with a JavaFx-2's TreeView representing a file system.

I want to enable drag and drop to allow move operations, but it looks like TreeItem doesn't include drag events listeners. I was only able to implement drag and drop on the englobing TreeView object, but it doesn't work for sub-items.

Am I missing something, or are drag and drop events not supported for TreeItems yet?

1
7
6/29/2012 8:52:04 AM

Accepted Answer

Question answered by Csh on the Oracle Forums : https://forums.oracle.com/forums/message.jspa?messageID=10426066#10426066

You have to implement drag on drop on the TreeCell.

Write a CellFactory like this:

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

If he wants to claim his reputation or add information to his solution, I'll change this answer.

7
7/9/2012 3:44:30 PM

The answer by @Timst is correct, but you should change the "updateItem" method cause in the above case you wont be able to set the Graphic of the "TreeItem" and the tree collapse won't work properly (won't clear the text in subNodes).

just change the method to:

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

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon