package felipe; import javafx.application.Application; import javafx.event.EventHandler; import javafx.geometry.NodeOrientation; import javafx.geometry.VPos; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.layout.Background; import javafx.scene.layout.BackgroundFill; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; import javafx.scene.text.TextAlignment; import javafx.stage.Stage; public class MirrorTest extends Application { static final boolean MIRROR_SCENE = true; public void start(Stage stage) { Pane group = new Pane(); Button button = new Button("Hello."); button.setLayoutX(5); button.setLayoutY(45); Line line = new Line(10, 48, 300, 30); Text text = new Text("Hello."); double x = 7, y = 100; text.setLayoutX(x); text.setLayoutY(y); text.setTextOrigin(VPos.TOP); double textWidth = text.getLayoutBounds().getWidth(); double textHeight = text.getLayoutBounds().getHeight(); Rectangle box = new Rectangle(textWidth, textHeight); box.setStroke(Color.BLACK); box.setStrokeWidth(1); box.setFill(Color.TRANSPARENT); box.setLayoutX(x); box.setLayoutY(y); Pane subPanel = new Pane(); subPanel.setBackground(new Background(new BackgroundFill(Color.AQUAMARINE, null, null))); subPanel.prefWidthProperty().bind(group.widthProperty()); subPanel.setPrefHeight(40); Circle c = new Circle(20, 20, 10); c.setFill(Color.BISQUE); subPanel.getChildren().add(c); Text subText = new Text(40, 20, "\u05d1\u05d2\u05d3\u05d4 ABC."); subText.setTextOrigin(VPos.CENTER); subPanel.getChildren().add(subText); Text t1 = new Text("\u05d1\u05d2\u05d3\u05d4 ABC."); t1.setLayoutX(7); t1.setLayoutY(150); Text t2 = new Text("He said \u05e9\u05dc\u05dd (shalom) to me."); t2.setLayoutX(7); t2.setLayoutY(180); Text t3 = new Text("text is left aligned\nshort\nline."); t3.setLayoutX(7); t3.setLayoutY(210); Text t4 = new Text("text is right aligned\nshort\nline."); t4.setTextAlignment(TextAlignment.RIGHT); t4.setLayoutX(7); t4.setLayoutY(300); group.getChildren().addAll(subPanel, button, line, text, box, t1, t2, t3, t4); final Scene scene = new Scene(group, 200, 400); scene.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler () { @Override public void handle(KeyEvent event) { if (event.getCode() == KeyCode.LEFT) { // scene.setNodeOrientation(NodeOrientation.LEFT_TO_RIGHT); scene.getRoot().setNodeOrientation(NodeOrientation.LEFT_TO_RIGHT); } if (event.getCode() == KeyCode.RIGHT) { // scene.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT); scene.getRoot().setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT); } System.err.println("orientation " + scene.getNodeOrientation()); } }); stage.setScene(scene); stage.show(); // if (MIRROR_SCENE) { // /* Mirror the scene (flip and translate all except the text node)*/ // double sceneWidth = scene.getWidth(); // Scale mirrorScale = new Scale(-1, 1, sceneWidth, 0); // Translate mirrorTranslate = new Translate(sceneWidth, 0); // group.getTransforms().addAll(mirrorScale, mirrorTranslate); // double textWidth2 = text.getLayoutBounds().getWidth(); // Translate textTranslate = new Translate(sceneWidth - textWidth2, 0); // text.getTransforms().addAll(mirrorScale, mirrorTranslate, textTranslate); // // /* Un-mirror button text (bad, reach inside the implementation)*/ // LabeledText buttonText = (LabeledText) ((ButtonSkin)button.getSkin()).getChildren().get(0); // double buttonTextWidth = buttonText.getLayoutBounds().getWidth(); // Scale buttonScale = new Scale(-1, 1, buttonTextWidth, 0); // Translate buttonTranslate = new Translate(buttonTextWidth, 0); // buttonText.getTransforms().addAll(buttonScale, buttonTranslate); // } } public static void main(String[] args) { launch(MirrorTest.class, args); } }