在Java FX中,如何从左上角(而不是左下角)开始绘制文本?

时间:2019-09-26 04:22:33

标签: java javafx

使用Java FX,文本x和y坐标指的是文本的左下角。如何使坐标参考左上角? 例如,如果在原点(0,0)处绘制了文本,则会在屏幕上绘制文本,但是在这种情况下,我们希望将其显示在左上方。

mat = @(t) sin(cos(w*t))
function xprime = ddt(t,x)
    a = mat(t) + 5 ; 
    b = 5;
    ddt = [ a, b; -b, -a]*x
end

此代码段显示 enter image description here

但是显示中缺少“ Hello World!0”。

2 个答案:

答案 0 :(得分:5)

text origin设置为VPos.TOP(默认为VPos.BASELINE):

Text text = new text(15, 0, "The Thirty-Nine Steps");
text.setTextOrigin(VPos.TOP);
  

在本地坐标中定义文本坐标系的原点。

您可能还希望将text bounds type设置为TextBoundsType.VISUAL(默认为TextBoundsType.LOGICAL):

text.setBoundsType(TextBoundsType.VISUAL);
  

可以根据要渲染的特定文本的边界(可视边界)或作为要渲染的字体和字符的属性(逻辑边界)来测量文本的几何形状。可视边界对于将文本定位为图形以及获得围绕文本的紧密封闭边界更为有用。

答案 1 :(得分:0)

我同意@Slaw和@Zephyr。

另一个想法是,如果OP更关注文本的绘制/放置(即不总是垂直),则主要问题是使用Group作为根节点。 在不打扰您的图形的情况下,如果将Group包裹在Stackpane中,我相信您会获得所需的行为。

public class JavaFxOriginText extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        Group root = new Group();
        StackPane mainRoot = new StackPane(root);
        mainRoot.setAlignment(Pos.TOP_LEFT);
        Scene scene = new Scene(mainRoot, 100, 50, Color.WHITE);
        primaryStage.setScene(scene);
        primaryStage.show();

        for (int i = 0; i < 5; i++) {
            Text text = new Text(0, i * 10, "Hello World! " + i);
            text.setFill(Color.BLACK);
            root.getChildren().add(text);
        }
    }
}