我一直在使用was presented here的自定义PannableCanvas,但遇到了一些麻烦。我的软件即将完成,最后要做的就是添加对在屏幕中央生成节点的支持。所以我最初所做的是:

nodeTranslateX/Y = -pannableCanvas.getTranslateX/Y


直到我意识到,如果您放大/缩小(比例不再等于1.0),它将完全弄乱,并且节点开始被放置在怪异的位置,直到那才起作用。因此,我尝试了:

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


而且那也不起作用!它被扔得更远了。

我尝试了多种转换组合,例如划分比例,反转比例,使用screenToLocal()命名。他们都没有工作。问题是,当缩小时,画布的translateX / Y会针对比例进行调整,但是当使用诸如300的理智坐标生成节点时,会给您提供诸如1500的东西。

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

感谢您的时间!

最佳答案

我这样做可以使其工作:

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误认为是在窗口内(即center = WIDTH / 2,HEIGHT / 2),但是实际上您也必须考虑实际的窗口位置。

关于java - JavaFX:PannableCanvas:获取CenterX/Y,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51075520/

10-12 19:42