【问题标题】:JavaFX: PannableCanvas: get CenterX/YJavaFX: PannableCanvas: 获取 CenterX/Y
【发布时间】:2018-06-28 05:50:54
【问题描述】:

我一直在使用was presented here 的定制 PannableCanvas,但遇到了一些麻烦。我的软件快完成了,我需要做的最后一件事是添加对在屏幕中心生成节点的支持。所以我最初的做法是:

nodeTranslateX/Y = -pannableCanvas.getTranslateX/Y

直到我意识到如果你放大/缩小(比例不再 = 1.0),它会完全搞砸它并且节点开始被放置在奇怪的位置。于是我尝试了:

nodeTranslateX/Y = -pannableCanvas.getTranslateX/Y * pannableCanvas.getScale()

那也没用!它被扔得更乱了。

我尝试了多种转换组合,例如划分比例、反转比例、使用 screenToLocal() 等等。他们都没有工作。问题是,当您缩小时,画布的 translateX/Y 会根据比例进行调整,但是当节点应该以 300 之类的合理坐标生成时,它会为您提供 1500 之类的东西。

有没有办法获取屏幕左上角相对于画布的坐标?我完全不知道如何解决这个问题。同样,我只需要能够在屏幕中心生成节点。我该怎么办?

感谢您的宝贵时间!

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    我这样做是为了让它工作:

    Window window = scene.getWindow();
    double screenCenterX = (window.getX() + window.getWidth()/2);
    double screenCenterY = (window.getY() + window.getHeight()/2);
    
    Point2D point = pannablePane.screenToLocal(screenCenterX, screenCenterY);
    
    double nodeX = point.getX() - MyNodeImplementation.WIDTH/2;
    double nodeY = point.getY() - MyNodeImplementation.HEIGHT/2;
    

    我将 screenX/Y 误认为在窗口内(即中心 = WIDTH/2,HEIGHT/2),但实际上您也必须考虑实际的窗口位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      相关资源
      最近更新 更多