如何在保持绝对位置的同时减小或增大正方形?

时间:2018-12-24 11:57:52

标签: java javafx

illustrative example №1 illustrative example №2

在窗口中,用户看到一个由一组正方形组成的字段。该字段是随机生成的。 (但没关系,只是夸耀了它的功能:DDDD)当用户滚动鼠标滚轮时,根据滚动方向,正方形应该增大或减小。因此,发生这种情况时,正方形不会更改其坐标,因此效果如第二张图片所示。它们之间形成缝隙!如何根据尺寸确定它们的位置?

如有必要,这是我的代码。不要介意。:DDD

scene.setOnScroll(e -> 
    {
        if(e.getDeltaY() > 0)
            {
        camera.cameraControlScale(camera.cameraControlGetScaleX()+0.25, 
        camera.cameraControlGetScaleY()+0.25);
            }
        else
            {

        camera.cameraControlScale(camera.cameraControlGetScaleX()-0.25, 
        camera.cameraControlGetScaleY()-0.25);
            }
     });



protected void objectControlScale(double x, double y)
    {
        imageview.setScaleX(x);
        imageview.setScaleY(y);
    }
protected double objectControlGetScaleY()
    {
        return imageview.getScaleY();
    }
protected double objectControlGetScaleX()
    {
        return imageview.getScaleX();
    }

在这里,我将函数放在侦听器中。^ 函数的内容很简单,并且应该不起作用!:DDD 是的,我知道,我在此处使用的是功能图片,但这有什么区别?现场有图片,但为清楚起见,我将其删除。他们有完全相同的问题。 您不必费心编写代码,如果您在哪里知道如何阅读它,解决此类问题等,我将不胜感激。

Rectangle / ImageView被直接添加到场景根:

Pane root = new Pane(... children ...);

1 个答案:

答案 0 :(得分:1)

使用scaleXscaleY应用的比例转换的枢轴点是节点的中心。此外,节点的位置不会自动更改。

假设您要缩放root窗格的所有子项,将转换应用于Pane本身是最简单的:

Pane realRoot = new Pane(root);
root.setScaleX(x);
root.setScaleY(y);

其他替代方法包括创建一个GridPane并将每个Rectangle / ImageView包裹在Group中。

如果您想自己确定子节点的位置,并希望为每个子节点使用独立的比例因子,事情会变得更加复杂:所有更新之后,您都需要根据{ {1}}个属性...