JavaFx文本中心位于X和Y位置

JavaFx文本中心位于X和Y位置,java,javafx,Java,Javafx,如何将文本的中心动态定位在圆的中心?当前,文本是使用左下角的给定X和Y坐标创建的,但是我希望它们是文本的中心。(红点是圆圈的中心,我想在圆圈中找到文本的中心) 当前: 预期: Label控件将为您执行以下操作: public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void

如何将文本的中心动态定位在圆的中心?当前,文本是使用左下角的给定X和Y坐标创建的,但是我希望它们是文本的中心。(红点是圆圈的中心,我想在圆圈中找到文本的中心)

当前: 预期:


Label控件将为您执行以下操作:

public class Main extends Application {

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

    @Override
    public void start(Stage stage) {
        stage.setTitle("Centered Text");
        Circle circle = new Circle(100);
        Circle innerCircle = new Circle(98);
        innerCircle.setFill(Color.WHITE);
        StackPane circles = new StackPane(circle, innerCircle);
        Label label = new Label("test", circles);
        label.setContentDisplay(ContentDisplay.CENTER);

        Pane p = new Pane(label);
        Scene scene = new Scene(p);
        stage.setScene(scene);
        stage.show();
    }
}

要使文本垂直居中,请单击

您需要自己计算X坐标。由于您希望文本总宽度的一半保持在250左右,因此需要知道总宽度才能进行计算

CSS在节点位于场景中之前不会应用于节点。但是您可以放弃CSS,这样程序就可以立即知道文本对象的适当首选宽度:

Text text = new Text(250, 250, "test");
text.setFont(Font.font("Arial", 24));
double width = text.prefWidth(-1);
text.setX(250 - width / 2);
text.setTextOrigin(VPos.CENTER);

请显示图像。@RanjitVamadevan添加了图像谢谢答案:D但是我想出了一个答案,让我保留当前的代码结构。我没有测试它,但您应该能够使用
text.applyCss()应用css
@LuciferUchiha起初我也有同样的想法,但我说“如果节点不在场景中,这种方法是不可行的。”很公平,我对这个答案很满意,所以其实并不重要:D
Text text = new Text(250, 250, "test");
text.setFont(Font.font("Arial", 24));
double width = text.prefWidth(-1);
text.setX(250 - width / 2);
text.setTextOrigin(VPos.CENTER);