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

标签 java javafx fxml

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

现在我已经尝试使用

     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 在评论中指出的,将转换应用于父级可能会更容易。

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

node.getTransforms().add(scale);

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

关于java - 如何在不改变布局和布局的情况下缩放xml中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60725635/

相关文章:

java - 将war文件部署到tomcat服务器

java - 如何在 Label JavaFX 中添加多行

java - 如何在Javafx中组合字符来创建图标?

java - 将项目添加到在 FXML 中创建的 ComboBox(在 JavaFX 应用程序的 Controller 类内)

java - 如何使 borderpane 中的右侧节点占据整个右侧

java - EJB 模块中的 XML-RPC 服务器

java - 使用 Stream 映射 Collection 结果

java - 有没有办法获取(知道)从同一个类中的类创建的所有对象?

JavaFx 文本字段未在 GUI 上更新

drag-and-drop - Javafx 拖放 TabPane