如何在画布上居中文本?

7

请问有人能给我一个在JavaFX 2 Canvas上居中文本的例子吗?

GraphicsContext 有一些函数,比如setTextAlign,但我不确定如何使用所有这些方法以及我真正需要哪些方法。我想要垂直和水平居中我的文本。

2个回答

23
  1. 将文本对齐方式设置为居中。
  2. 将文本基线设置为居中。
  3. 在画布中央绘制文本(通过将其定位在画布宽度和高度的一半处)。

这里是一个示例:

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.geometry.VPos;
import javafx.scene.*;
import javafx.scene.canvas.*;
import javafx.scene.layout.StackPane;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;

public class TextCanvas extends Application {
    @Override public void start(Stage primaryStage) {
        Canvas canvas = new Canvas(175, 40);
        GraphicsContext gc = canvas.getGraphicsContext2D();
        gc.setTextAlign(TextAlignment.CENTER);
        gc.setTextBaseline(VPos.CENTER);
        gc.fillText(
            "Text centered on your Canvas", 
            Math.round(canvas.getWidth()  / 2), 
            Math.round(canvas.getHeight() / 2)
        );

        StackPane layout = new StackPane();
        layout.getChildren().addAll(canvas);

        primaryStage.setScene(new Scene(layout));
        primaryStage.show();
    }
    public static void main(String[] args) { launch(args); }
}

居中的文字在画布上


谢谢jewelsea,工作正如预期,并且看到示例,我现在也了解了方法。 - stefan.at.kotlin

0
你想要使用
  control.setAlignment(Pos.CENTER); and

  control.setStyle("-fx-alignment: CENTER;");

点击这里 获取一些可下载的演示代码。


1
哎呀,不幸的是,Canvas及其所有内容都是一个完整的节点,所以我担心这样做行不通。 - stefan.at.kotlin
我粗略地看了一下,我的印象是这是用于定位容器中的节点,例如在HBox中。但是Canvas不是容器/ Canvas中的文本不是节点? - stefan.at.kotlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接