Как масштабировать узлы в jf xml без изменения layoutX и layoutY - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь изменить масштаб панели, чтобы она соответствовала разрешению монитора. оригинальное окно было сделано для отображения HD.

на данный момент я пытался использовать

     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 a LayoutY. его расширяется как влево, так и вправо.

Как я могу масштабировать узел таким образом, чтобы верхний левый угол узла всегда находился на заданных layoutX и layoutY

1 Ответ

2 голосов
/ 17 марта 2020

Точка вращения узла для преобразования масштаба, примененного с использованием scaleX и scaleY, является центром узла. Если вместо этого вы используете преобразование Scale, вы можете указать точку вращения. Как отметил @James_D в комментариях, вероятно, было бы проще применить преобразование к родительскому btw.

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

node.getTransforms().add(scale);

Кроме того, обратите внимание, что при использовании разных масштабных коэффициентов для обоих измерений, результат рендеринга не будет иметь такое же отношение высоты к ширине для ваших узлов.

...