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.