Привязка метки к нижнему центру сцены - JavaFX - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь понять, как правильно отцентрировать и связать ярлык в нижней части сцены. У меня есть простое тестовое приложение, чтобы показать, с чем я работаю и в чем заключается моя проблема.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class LabelTest extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Pane root = new Pane();
        Scene scene = new Scene(root, 400, 400);

        Label label = new Label("Testing testing 1 2 3");

        label.layoutXProperty().bind(scene.widthProperty().divide(2).subtract(label.getWidth() / 2));   //Should align label to horizontal center, but it is off  
        label.layoutYProperty().bind(scene.heightProperty().subtract(label.getHeight() + 35));          //Aligns the label to bottom of scene

        root.getChildren().add(label);
        stage.setScene(scene);
        stage.show();
    }
}

Логика c, стоящая за моим позиционированием, имеет для меня смысл, поэтому я не уверен, почему это так не горизонтально по центру. Я включил скриншот ниже, чтобы показать, как выглядит результат:

enter image description here

А ниже приведено больше того, на что я хочу, чтобы он выглядел (до сих пор немного, но вы поняли)

enter image description here

Заранее спасибо всем, кто мне помогает!

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Пусть менеджеры по макету сделают макет для вас:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class LabelTest extends Application {

    @Override
    public void start(Stage stage) throws Exception {

        Label label = new Label("Testing testing 1 2 3");
        BorderPane root = new BorderPane();
        //center label by
        //BorderPane.setAlignment(label, Pos.CENTER);
        //root.setBottom(label);
        //OR
        root.setBottom(new StackPane(label));
        Scene scene = new Scene(root, 400, 400);
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}
0 голосов
/ 06 февраля 2020

Проблема в том, что вы принимаете значения ширины / высоты во время привязки. И в этом случае это будет 0, поскольку они еще не обработаны. Вам нужно также связать эти свойства для вычислений.

label.layoutXProperty().bind(scene.widthProperty().divide(2).subtract(label.widthProperty().divide(2)));
label.layoutYProperty().bind(scene.heightProperty().subtract(label.heightProperty().add(35)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...