qiu_xia 2022-10-19 16:54 采纳率: 0%
浏览 8
已结题

javaFx 表格拖拽排序的时候如何触发表格自动滚动

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,从而再次触发滚动,形成死循环,有没有什么办法可以解决?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月27日
    • 创建了问题 10月19日

    悬赏问题

    • ¥15 mmo能不能做客户端怪物
    • ¥15 osm下载到arcgis出错
    • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
    • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
    • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
    • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
    • ¥15 QQ邮箱过期怎么恢复?
    • ¥15 登录他人的vue项目显示服务器错误
    • ¥15 (标签-android|关键词-app)
    • ¥15 comsol仿真压阻传感器