Reputation: 23104
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:
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
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
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