Как сделать выравнивание по левому краю TextFlow в центре окна в JavaFX - PullRequest
1 голос
/ 13 января 2020

Как сделать так, чтобы текст в TextFlow выравнивался по левому краю, но TextFlow находится в центре окна?

Я пытаюсь реализовать его с помощью VBox, StackPane и BorderPane, но они могут выравнивать текст только в по центру или сделайте TextFlow слева от окна.

Нужный мне эффект похож на IDEA: The effect i need

Но эффект, который я достиг, похож на это:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        TextFlow text = new TextFlow(
            new Text("Search Everywhere\n"),
            new Text("Project View\n"),
            new Text("Go to File\n")
        );
        text.setTextAlignment(TextAlignment.LEFT);
        VBox root = new VBox(text);
        root.setAlignment(Pos.CENTER);

        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
     }
  }

enter image description here

Ответы [ 2 ]

1 голос
/ 13 января 2020

Спасибо за подсказки c0der, я обнаружил, FlowPane может легко добиться этого эффекта:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        TextFlow text = new TextFlow(
            new Text("Search Everywhere\n"),
            new Text("Project View\n"),
            new Text("Go to File\n")
        );
        text.setTextAlignment(TextAlignment.LEFT);
        FlowPane root = new FlowPane(text);
        root.setAlignment(Pos.CENTER);

        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }
}

effect

0 голосов
/ 13 января 2020

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

Чтобы это работало, вам нужно убедиться, что ваш TextFlow не имеет размера больше, чем вы хотите, иначе он не даст вам ожидаемое поведение В этом случае я выбираю 200x200, и вы увидите его центр в окне.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;

public class Sample extends Application {

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

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

        TextFlow tf = new TextFlow();
        tf.setStyle("-fx-background-color: red;");
        tf.setTextAlignment(TextAlignment.LEFT);
        tf.setMaxSize(200, 200);

        StackPane sp = new StackPane(tf);
        sp.setStyle("-fx-background-color: blue;");

        Text t1 = new Text("This is line one, left justified" + System.lineSeparator());
        Text t2 = new Text("This is line two, left justified"+ System.lineSeparator());
        Text t3 = new Text("This is line three, left justified"+ System.lineSeparator());
        Text t4 = new Text("This is line four, left justified"+ System.lineSeparator());
        tf.getChildren().addAll(t1, t2, t3, t4);

        Scene scene = new Scene(sp);
        primaryStage.setScene(scene);
        primaryStage.setWidth(600);
        primaryStage.setHeight(600);

        primaryStage.show();

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...