Почему мой код javafx центрирует все мои формы? - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь научиться JavaFX и пытался создать простой смайлик. Но по какой-то причине все мои формы оказываются центрированными, а не в координатах x и y, с которыми я их построил. Я не могу понять почему. Может ли кто-нибудь помочь мне разобраться?

Вот мой код:

import javafx.*;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;

public class smiley extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    public void start(Stage primaryStage) throws Exception {
        Circle head = new Circle(250, 250, 150);
        head.setFill(Color.YELLOW);
        Circle eyeL = new Circle(200, 175, 25);
        eyeL.setFill(Color.BLACK);
        Circle eyeR = new Circle(300, 175, 25);
        eyeR.setFill(Color.BLACK);
        double[] points = { 250.0, 200.0, 250.0, 275.0, 290.0, 275.0 };
        Polygon nose = new Polygon(points);
        Arc smile = new Arc(275.0, 300.0, 75.0, 50.0, 180.0, 180.0);
        smile.setStroke(Color.RED);
        smile.setFill(Color.YELLOW);

        StackPane smiley = new StackPane();
        smiley.getChildren().add(head);
        smiley.getChildren().add(eyeL);
        smiley.getChildren().add(eyeR);
        smiley.getChildren().add(nose);
        smiley.getChildren().add(smile);

        Scene scene = new Scene(smiley, 500, 500);
        primaryStage.setTitle("Smiley");
        primaryStage.setScene(scene);
        primaryStage.show();

    }

}

И вот что у меня получается

улыбающееся лицо

1 Ответ

0 голосов
/ 28 августа 2020

StackPane размещает свои дочерние элементы друг на друге. Представьте себе стопку блинов. Последний идет вверху, а первый внизу. Если вы установите границу / отступы, то дочерние элементы будут размещены в центре этих вставок. Кроме того, StackPane изменит размер всех дочерних элементов в соответствии с областью содержимого, но если это невозможно, он поместит их в центр. Я не думаю, что это ваше намерение, поэтому попробуйте использовать класс Pane, от которого наследуется StackPane.

Pane pane = new Pane();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...