javaFx 表格拖拽排序的时候如何触发表格自动滚动
我是这样实现拖拽排序的
row.setOnDragDetected(event -> {
if (!row.isEmpty()) {
Integer index = row.getIndex();
Dragboard db = row.startDragAndDrop(TransferMode.MOVE);
db.setDragView(row.snapshot(null, null));
ClipboardContent cc = new ClipboardContent();
cc.put(SERIALIZED_MIME_TYPE, index);
db.setContent(cc);
event.consume();
}
});
//释放-验证
row.setOnDragOver(event -> {
Dragboard db = event.getDragboard();
/* check if same table view
TableRow<Person> rowTemp = (TableRow<Person>) event.getGestureSource();
if (rowTemp.getTableView() != row.getTableView()) {
}*/
if (db.hasContent(SERIALIZED_MIME_TYPE)) {
if (row.getIndex() != ((Integer) db.getContent(SERIALIZED_MIME_TYPE)).intValue()) {
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
event.consume();
}
}
});
//释放-执行
row.setOnDragDropped(event -> {
Dragboard db = event.getDragboard();
if (db.hasContent(SERIALIZED_MIME_TYPE)) {
int draggedIndex = (Integer) db.getContent(SERIALIZED_MIME_TYPE);
ProductionProcessVO draggedPerson = tableView.getItems().remove(draggedIndex);
int dropIndex;
if (row.isEmpty()) {
dropIndex = tableView.getItems().size();
} else {
dropIndex = row.getIndex();
}
tableView.getItems().add(dropIndex, draggedPerson);
int start;
int end;
if (draggedIndex > dropIndex) {
start = dropIndex;
end = draggedIndex;
} else {
start = draggedIndex;
end = dropIndex;
}
for (int i = start; i <= end; i++) {
tableView.getItems().get(i).setNum(String.valueOf(i + 1));
}
event.setDropCompleted(true);
tableView.getSelectionModel().select(dropIndex);
event.consume();
}
});
现在的问题是,如果数据量大到超过一页会出现滚动条,而拖拽的时候没办法触发滚动条,我希望有个办法可以帮我在拖拽到表格底部或者顶部时自动滚动或者其他更好的方式
我尝试在setOnDragOver里面用tableView.scrollTo(row.getIndex());,但每次滚动会触发拖拽DragOver,从而再次触发滚动,形成死循环,有没有什么办法可以解决?