Javafx BorderPane.setCenter меняет положение нижней области - PullRequest
0 голосов
/ 02 марта 2020

Я изучаю Javafx, где я пытаюсь отобразить аналоговые часы в центре и значение угла секундной стрелки в виде метки в левой нижней части экрана. Если я пытаюсь увеличить радиус круга, который является членом группы часов, для которой установлен центр BorderPane, он меняет положение нижней области, в которой отображается значение угла. Я ожидал, что центральная область останется в ее области, даже если узлы большего размера будут добавлены (или обновлены) к группе часов, а нижняя область все еще видна. Вот мой пример кода.

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.text.Text;
import javafx.scene.transform.Rotate;
import javafx.stage.Screen;
import javafx.stage.Stage;

public class MainApp extends Application {
    static BorderPane borderPane;
    static Group clock;
    public static Circle clockCircle;
    public static Line angHand;
    public static Text angText;
    public static Rotate angRotate;

    public static Label angLabel;

    public static void main(String[] args) {
        borderPane = new BorderPane();

        clock = new Group();

        clockCircle = new Circle(360, Color.RED); //increasing the radius affects other region

        angHand = new Line();
        angHand.startXProperty().bind(clockCircle.centerXProperty());
        angHand.startYProperty().bind(clockCircle.centerYProperty());
        angHand.endXProperty().bind(clockCircle.centerXProperty());
        angHand.endYProperty().bind(clockCircle.centerYProperty().subtract(clockCircle.getRadius()));

        angText = new Text();

        angRotate = new Rotate();
        angRotate.pivotXProperty().bind(clockCircle.centerXProperty());
        angRotate.pivotYProperty().bind(clockCircle.centerYProperty());

        angHand.getTransforms().addAll(angRotate);
        angText.getTransforms().addAll(angRotate);

        angLabel = new Label();
        angLabel.setText("Angle: 0");
        BorderPane.setAlignment(angLabel, Pos.BOTTOM_LEFT);

        clock.getChildren().addAll(clockCircle, angHand, angText);

        Button home = new Button();
        home.setGraphic(new ImageView(new Image(MainApp.class.getResourceAsStream("etc/home.png"))));

        borderPane.setCenter(clock);
        borderPane.setBottom(angLabel);
        borderPane.setRight(home);

        //DataReceiver objDataReceiver = new DataReceiver();
        //Thread dataRecvThread = new Thread(objDataReceiver, "DATARECVR");

        //dataRecvThread.start();

        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("CLOCK");
        primaryStage.setMaximized(true);
        primaryStage.setScene(new Scene(borderPane, Screen.getPrimary().getVisualBounds().getWidth(), Screen.getPrimary().getVisualBounds().getHeight()));
        primaryStage.show();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...