首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX可pannable GridPane

JavaFX可pannable GridPane
EN

Stack Overflow用户
提问于 2016-09-13 04:43:20
回答 1查看 1K关注 0票数 2

对于我目前的项目,我需要一个大的均匀网格与透明的背景,其中一个可以缩放和平移。我最初尝试将ScrollPane与其setPannable(true)一起使用,但很快发现,即使调用setStyle("-fx-background-color: transparent")setStyle("-fx-background: transparent"),滚动窗格背景仍将是不确定的。因此,删除了这个简单的选项后,我需要使有问题的GridPane直接可pannable。

我已经尝试了几种方法,包括尝试将鼠标位置绑定到GridPane的Translate属性(这根本不起作用),但我没有找到更有希望的替代方法来正常工作:

代码语言:javascript
复制
    GridPane gridView = new GridPane();
    int x;
    int y;
    gridView.setOnDragEntered( (event) -> {
        x = event.getX();
        y = event.getY();
    });
    gridView.setOnDragDetected( (event) -> {
        gridView.setTranslateX(X - event.getX());
        gridView.setTranslateY(Y - event.getY());
    });

但是,这只会使贴图向上和向左跳跃,而不是使其按预期使用鼠标缓慢平移。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-14 19:33:29

想尽办法把它弄清楚。剩下的一个问题是,当GridPane被摇摄时,它会相当抖动,但目前它处于可接受的水平。

代码语言:javascript
复制
    int x = 0;
    int y = 0;
    gridView.setOnMouseDragged((event) -> {
        if(x != 0){ //prevent from panning before values are initialized
            gridView.setTranslateX( gridView.getTranslateX() + limit(event.getX() - x, 25));
            gridView.setTranslateY( gridView.getTranslateY() + limit(event.getY() - y, 25));
        }
        x = (int)event.getX();
        y = (int)event.getY();
    });

其中,Limit(double num, double limit)方法将输入num限制为范围-limit,limit。降低限制会降低抖动,但这样做的代价也是降低响应性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39458506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档