如何在不更改布局和布局的情况下缩放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 的方式缩放节点
使用 scaleX
和 scaleY
应用缩放变换的节点的轴心点是节点的中心。如果您改为使用 Scale
转换,则可以指定轴心点。正如@James_D 在评论中指出的那样,将转换应用于父 btw 可能会更容易。
Scale scale = new Scale(
ratioX, ratioY,
0, 0 // pivot coordinates
);
node.getTransforms().add(scale);
此外请注意,对两个维度使用不同的比例因子,渲染结果将不会为您的节点具有相同的高宽比。
我正在尝试重新缩放我的窗格以适应显示器的分辨率。原创 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 的方式缩放节点
使用 scaleX
和 scaleY
应用缩放变换的节点的轴心点是节点的中心。如果您改为使用 Scale
转换,则可以指定轴心点。正如@James_D 在评论中指出的那样,将转换应用于父 btw 可能会更容易。
Scale scale = new Scale(
ratioX, ratioY,
0, 0 // pivot coordinates
);
node.getTransforms().add(scale);
此外请注意,对两个维度使用不同的比例因子,渲染结果将不会为您的节点具有相同的高宽比。