Я изучаю 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();
}
}