JavaFx 8 TreeCell Перетаскивание

Цель состоит в том, чтобы использовать перетаскивание на TreeView, чтобы переместить узлы на себя.
Я видел несколько примеров, когда события обрабатываются в переопределенном TreeCell, но срабатывает только обнаруженное событие.
Это мой код:

public class TreeCellImpl extends TreeCell<TreeItemContent> {

    public TreeCellImpl() {
        setOnDragEntered(e -> {
            System.out.println(" Entered ");
            e.consume();
        });
        setOnDragDetected(e -> {
            System.out.println(" Detected ");
            startDragAndDrop(TransferMode.MOVE);
            e.consume();
        });
        setOnDragDone(e -> {
            System.out.println(" Done ");
            e.consume();
        });
        setOnDragDropped(e -> {
            System.out.println(" Dropped ");
            e.setDropCompleted(true);
            e.consume();
        });
        setOnDragExited(e -> {
            System.out.println(" Exited ");
            e.consume();
        });
        setOnDragOver(e -> {
            System.out.println(" Over ");
            e.consume();
        });
     }
}

Где я не прав?

1 ответ

Решение

Кажется, что обработчики событий не срабатывают, пока вы не поместите некоторый контент в Dragboard:

    setOnDragDetected(e -> {
        System.out.println(" Detected ");
        Dragboard db = startDragAndDrop(TransferMode.MOVE);
        ClipboardContent content = new ClipboardContent();
        content.putString( "Hello!" );
        db.setContent(content);
        e.consume();
    });

Вы также можете выбрать другой тип механизма перетаскивания, описанный в MouseEvent. Т.е. MouseDragEvent.

Другие вопросы по тегам