我正在尝试重新缩放 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
最佳答案
使用 scaleX
和 scaleY
应用的缩放变换的节点的枢轴点是节点的中心。如果您改用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/