JavaFX快照导致布局/视图更改

时间:2019-09-05 22:09:53

标签: javafx javafx-8

我正在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);
            });
       });
}

0 个答案:

没有答案