2015-05-20 4 views
0

Целью является использование перетаскивания на treeView для перемещения узлов на себя.
Я видел несколько примеров, где события обрабатываются в переопределенном TreeCell, но запускается только обнаруженное событие.
Это мой код:JavaFx 8 TreeCell Drag and Drop

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.

+0

он работает, спасибо! – Alessandro