如何在不更改布局和布局的情况下缩放xml中的节点

How to scale Nodes in jfxml without changing layoutX and layoutY

我正在尝试重新缩放我的窗格以适应显示器的分辨率。原创 window 是为高清显示器制作的。

目前我已经尝试使用

     public void initialize(URL location, ResourceBundle resources) {
        Rectangle2D screenBounds = Screen.getPrimary().getBounds();
        double x = screenBounds.getWidth();
        double y = screenBounds.getHeight();
        double ratioX = x/1366;
        double ratioY = y/768;
        System.out.println(ratioX);
        System.out.println(ratioY);
        ObservableList<Node> l = pane.getChildren();
        for (Node n : l) {
            n.setScaleX(ratioX);
            n.setScaleY(ratioY);
            n.setLayoutX(n.getLayoutX() * ratioX);
            n.setLayoutY(n.getLayoutY() * ratioY);
        }

但是 setScaleX 和 setScaleY 以节点不起源于给定 LayoutX 和 LayoutY 的方式扩展节点。它向左和向右扩展。

如何以节点的左上角始终位于定义的 layoutX 和 layoutY 的方式缩放节点

使用 scaleXscaleY 应用缩放变换的节点的轴心点是节点的中心。如果您改为使用 Scale 转换,则可以指定轴心点。正如@James_D 在评论中指出的那样,将转换应用于父 btw 可能会更容易。

Scale scale = new Scale(
                    ratioX, ratioY,
                    0, 0 // pivot coordinates
              );

node.getTransforms().add(scale);

此外请注意,对两个维度使用不同的比例因子,渲染结果将不会为您的节点具有相同的高宽比。