我正在JavaFX 8桌面应用程序的AnchorPane中的TableView,TreeTableView和TreeView中实现拖放,以动态地重新排列行。我为table-row或tree-table-row节点制作了快照,并将DragBoard的DragView设置为该快照图像,以便于拖动动作可以很好地显示正在拖动的行。
但是,当我做快照时,它会使我的应用程序的布局/视图突然更改并扩展,并在整个视图的边缘周围增加新的空白空间,并抛出布局。
奇怪的是,这只会发生一次,然后,如果我重新最大化或调整窗口大小,则视图会正确地重新布置自身,然后下一个拖动快照不会导致问题再次出现。在我看来,快照和视图调整大小时边界扩展或计算不正确。
如果我对尚未添加到场景中的新创建的节点进行快照,则不会发生任何问题(例如dragBoard.setDragView(new Text(getItem().toString()).snapshot(null, null), 0, 0)
),因此这是我当前的选择,但最好拖动行的快照。
我尝试添加小尺寸的裁剪矩形的SnapshotParameters,但这不会改变问题。
例如,首选代码为:
private class DraggableTableRow extends TableRow {
private DraggableTableRow() {
setOnDragDetected(dragDetectedEvent -> {
Dragboard dragBoard = tableView.startDragAndDrop(TransferMode.MOVE);
ClipboardContent content = new ClipboardContent();
content.putString(Integer.toString(getIndex()));
dragBoard.setContent(content);
dragBoard.setDragView(snapshot(null, null), 0, 0);
});
});
}