Допустим, я создаю SVGPath и Label, а затем добавляю их на StackPane (хочу чтобы надпись отображалась поверх SVGPath), а затем всё это добавляю в окно. Как-то так:
package sample;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.FillRule;
import javafx.scene.shape.SVGPath;
import javafx.stage.Stage;
public class Main extends Application {
private static final String BUBBLE_SVG_PATH = "m 32.339338,-904.55632 c -355.323298,0 -643.374998,210.31657 " +
"-643.374998,469.78125 0,259.46468 288.0517,469.812505 643.374998,469.812505 123.404292,0 " +
"238.667342,-25.3559002 336.593752,-69.3438 69.80799,78.7043 181.84985,84.1354 378.90625,5.3126 " +
"-149.2328,-8.9191 -166.3627,-41.22 -200.6562,-124.031305 80.6876,-78.49713 128.5,-176.04496 " +
"128.5,-281.75 0,-259.46468 -288.0205,-469.78125 -643.343802,-469.78125 z";
@Override
public void start(Stage primaryStage) throws Exception{
primaryStage.setTitle("Hello World");
SVGPath svgPath = new SVGPath();
svgPath.setContent(BUBBLE_SVG_PATH);
svgPath.setFill(Color.WHITE);
svgPath.setStroke(Color.BLACK);
svgPath.setScaleX(0.5);
svgPath.setScaleY(0.5);
Label label = new Label("Hello world");
System.out.println(svgPath.getBoundsInLocal());
System.out.println(svgPath.getBoundsInParent());
System.out.println(svgPath.getLayoutBounds());
StackPane stackPane = new StackPane();
stackPane.getChildren().add(svgPath);
stackPane.getChildren().add(label);
Group root = new Group();
root.getChildren().add(stackPane);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Проблема в том, что layoutBounds у Node не учитывает трансформацию. В результате stackPane растягивается до исходного размера SVGPath, а в след за собой растягивает и окно.
То есть получается, что окно и stackPane имеют размер в 2 раза больше, чем надо. И это совсем не прикольно. Ах да, задание scale для самого stackPane ничего не меняет + я хочу масштабировать только SVGPath, но не остальных детей stackPane.
Я понимаю, что это поведение согласно документации. Но как правильно масштабировать Node, чтобы родитель это корректно воспринимал и растягивался под новый, а не старый размер?