qed
qed

Reputation: 23104

How to anchor text at its center in javafx?

Here is the code:

package je3.thread;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.stage.Stage;

/**
 * Text seemed to be anchored at the bottom left corner.
 * See screenshot here: http://i60.tinypic.com/2mnnmrn.jpg
 */
public class ShowText extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        Pane pane = new Pane();
        pane.setPadding(new Insets(0, 0, 0, 0));
        Text text1 = new Text(20, 20, "Programming fun");
//        text1.setFont(Font.font("Courier", BOLD, FontPosture.ITALIC, 15));
        Text text2 = new Text(30, 30, "Programming fun");
        Text text3 = new Text(40, 40, "Programming fun");
//        text3.setFill(Color.RED);
//        text3.setUnderline(true);
        pane.getChildren().addAll(text1, text2,text3);
        Scene scene = new Scene(pane);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

Result:

enter image description here

What I am looking for is a method to specify a coordinate and anchor the center of a given text object to that coordinate.

Upvotes: 1

Views: 1322

Answers (2)

Marcos Supridatta
Marcos Supridatta

Reputation: 161

You could try to create an Label instead of Text, and bind the translateX to the half negative value of the width, like this:

label.translateXProperty().bind(label.widthProperty().divide(2).negate());
// same way to y axis, if needed
label.translateYProperty().bind(label.heightProperty().divide(2).negate());

Upvotes: 1

Jurgen
Jurgen

Reputation: 2154

Something like this then:

private Text centerTextOnCoordinate( String text, double x, double y )
{
    Text  txtShape = new Text( x, y, text );
    txtShape.setX( txtShape.getX() -  txtShape.getLayoutBounds().getWidth() / 2 );
    return  txtShape;
}

Upvotes: 2

Related Questions