当前位置: 首页 > 知识库问答 >
问题:

JavaFX可平移网格

岑彬炳
2023-03-14

对于我当前的项目,我需要一个带有透明背景的大均匀网格,可以缩放和平移。我最初尝试使用带有setPannable(true)ScrollPane,但很快发现即使您调用setStyle("-fx-background-Color:透明")setStyle("-fx-background:透明"),滚动窗格背景也会保持不可见。因此,消除了这个简单的选项后,我需要使有问题的GridPane直接可平移。

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

    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());
    });

然而,这只会使地图向上和向左跳跃,而不是像预期的那样用鼠标慢慢平移。

共有1个答案

丁和歌
2023-03-14

设法弄明白了大部分。剩下的一个问题是,< code>GridPane在平移时会有些抖动,但目前还在可接受的水平。

    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(双num,双限制)方法将输入num限制在范围[-限制,限制]内。减少限制会减少抖动,但也会以降低响应能力为代价。

 类似资料:
  • 我可以在JavaFX中创建一个仅水平滚动的滚动窗格,如下所示: 但是,鼠标滚轮在这种情况下仍然尝试垂直滚动而不是水平滚动(除非我专门在水平滚动条上滚动。)

  • 我试图将乘法VBox添加到scrollpane中的gridpane(在下面的codesnippet中称为refPane)。 它在一行中添加不超过ITEMS_PER_ROW的Vbox,并在下一行中继续。也不应该有更多的行,然后ITEMS_PER_COLUM可见。问题是,如果我添加更多的ITEMS_PER_ROW*ITEMS_PER_COLUMN到网格中,而不是obingbeingscrollable

  • 图形变换 从今天开始,我们就开始谈一谈图形变换。图形变换是指用数学方法调整所绘形状的物理属性,其实质是坐标变形。所有的变换都依赖于后台的数学矩阵运算,所以我们只要使用变换的功能即可,无需去理解这些运算。谈到图形变换,不得不得说的三个基本变换方法就是: 平移变换:translate(x,y) 旋转变换:rotate(deg) 缩放变换:scale(sx,sy) 其实坐标变形的本质是变换矩阵,所以在最

  • 本文向大家介绍Vue实现可移动水平时间轴,包括了Vue实现可移动水平时间轴的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Vue实现可移动水平时间轴的具体代码,供大家参考,具体内容如下 里程碑时间轴具体实现 效果图 编辑里程碑效果图 编辑里程碑 stonedetail.vue 关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。 以上就是本文的全部内容,希望对

  • 本节课的平移变换在“1.3 WebGL坐标系”源码的基础上更改,以下几种方法都是沿着X轴平移-0.4,也就是把所有顶点X坐标分别加-0.4。下面所谓的几种方法并不是说开发实践中存在的方法,本节课这样安排的目的只是为了通过对比加深你的理解。 方法一 重新定义三角形单个顶点的坐标,这也就是说数学计算任务由人完成。 1.3节中三角形三个顶点的坐标如下。 var data=new Float32Array