package ru.khasang.cachoeira.viewcontroller.draganddrop; import javafx.scene.control.TreeTableRow; import javafx.scene.input.*; import ru.khasang.cachoeira.viewcontroller.MainWindowController; public abstract class TableDragAndDrop { protected static final DataFormat SERIALIZED_MIME_TYPE = new DataFormat("application/x-java-serialized-object"); protected MainWindowController controller; public void dragDetected(MouseEvent event, TreeTableRow<?> row) { if (!row.isEmpty()) { Dragboard dragboard = row.startDragAndDrop(TransferMode.MOVE); dragboard.setDragView(row.snapshot(null, null)); ClipboardContent content = new ClipboardContent(); content.put(SERIALIZED_MIME_TYPE, row.getIndex()); dragboard.setContent(content); event.consume(); } } public void dragOver(DragEvent event, TreeTableRow row) { Dragboard dragboard = event.getDragboard(); if (dragboard.hasContent(SERIALIZED_MIME_TYPE)) { if (row.getIndex() != (Integer) dragboard.getContent(SERIALIZED_MIME_TYPE)) { event.acceptTransferModes(TransferMode.COPY_OR_MOVE); event.consume(); } } } public abstract void dragDropped(DragEvent event, TreeTableRow row); }