【问题标题】:JavaFX - centered Text in SceneJavaFX - 场景中的居中文本
【发布时间】:2016-09-29 04:55:31
【问题描述】:

我有一个 JavaFX Text,SceneGroup

Text waitingForKey
Scene scene
Group root

我有一个字符串 String waitingForKeyString 我要添加到 waitingForKey 并且我想要居中对齐。

问题是有时字符串有两个句子,我无法对齐它

 String waitingForKeyString= " Level 2 \n\n" + "Press ENTER to start a new game";

String waitingForKeyString= " 按 ENTER \n"+ "开始游戏", messageString="";

那么

Scene scene = new Scene(root,SCREEN_WIDTH, SCREEN_HEIGHT, Color.BLACK);
waitingForKey.setText(waitingForKeyString);
root.getChildren().add(waitingForKey);

那么我怎样才能将它对齐到中心呢?当我尝试对齐第一个waitingForKeyString时,我破坏了第二个`waitingForKeyString 和viccersa。

【问题讨论】:

    标签: java javafx alignment


    【解决方案1】:

    您可以使用StackPane 作为Scene 的根,因为它有一个alignmentProperty

    如果您想在StackPane 中单独对齐Nodes,可以使用StackPanepublic static void setAlignment(Node child, Pos value) 方法。

    示例(一个文本居中对齐,另一个文本左上对齐)

    public class Main extends Application {
    
        @Override
        public void start(Stage primaryStage) {
            try {
                StackPane root = new StackPane();
                Text text2 = new Text("I will be aligned TOPLEFT");
                Text text = new Text(" Level 2 \n\n" + "Press ENTER to start a new game");
                text.setTextAlignment(TextAlignment.CENTER);
                root.getChildren().addAll(text2, text);
                StackPane.setAlignment(text2, Pos.TOP_LEFT);
                StackPane.setAlignment(text, Pos.CENTER);
    
    
                Scene scene = new Scene(root, 400, 400);
                primaryStage.setScene(scene);
                primaryStage.show();
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    【讨论】:

    • 谢谢。但是,如果我也想在 TopLeft 中添加文本该怎么办?它将所有内容对齐到中心。我应该制作另一个 StackPane,然后将它们合并在一起吗?
    • 用两个文本为您更新了示例,一个是居中对齐的,一个是左上角。
    【解决方案2】:

    Text 指定TextAlignment.CENTER,并使用“默认为Pos.CENTER”的StackPane 之类的布局。

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.layout.StackPane;
    import javafx.scene.paint.Color;
    import javafx.scene.text.Font;
    import javafx.scene.text.Text;
    import javafx.scene.text.TextAlignment;
    import javafx.stage.Stage;
    /**
     * @see http://stackoverflow.com/a/37541777/230513
     */
    public class Test extends Application {
    
        @Override
        public void start(Stage primaryStage) {
            Text waitingForKey = new Text("Level 2 \n\n" + "Press ENTER to start a new game");
            waitingForKey.setTextAlignment(TextAlignment.CENTER);
            waitingForKey.setFont(new Font(18));
            waitingForKey.setFill(Color.ALICEBLUE);
            StackPane root = new StackPane();
            root.getChildren().add(waitingForKey);
            Scene scene = new Scene(root, 320, 240, Color.BLACK);
            primaryStage.setTitle("Test");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    【讨论】:

    • @trashgod 如果我想将文本移动到 TopLeft?我应该创建另一个 StackPane 吗?或者我可以以某种方式移动每个孩子吗?
    • DVarga 的updated answer 正确结合了我们建议的方法。
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多