Greetings How to make a javaFX move a rectangle?
Here is the code: main.java
public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception{ Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); primaryStage.setTitle("Hello World"); primaryStage.setScene(new Scene(root)); primaryStage.show(); } public static void main(String[] args) { launch(args); } } controller.java
public class Controller { @FXML Rectangle tube = new Rectangle(); public void onClick() throws InterruptedException { int x = 0; while(x < 100){ Double a = tube.getX(); Double b = tube.getY(); tube.setX(a-5); x++; Thread.sleep(10); } } } Sample form:
It is necessary that this rectangle rode to the end of the line to the left. How to do it?
UPD1 ::
public void onClick() throws InterruptedException { takeFrom(); // ΠΠΎΠ½Π΅ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ: double stopPositionX = 24; KeyFrame keyFrame = new KeyFrame( // Π‘ΡΠΈΡΠ°Π΅ΠΌ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±ΡΠ΄Π΅Ρ Π΄Π»ΠΈΡΡΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ: Duration.millis((tube.getLayoutX() - stopPositionX) / 5 * 10), event -> { System.out.println("ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ±Ρ ΠΏΠΎ ΠΎΡΠ²ΠΎΠ΄ΡΡΠ΅ΠΌΡ ΡΠΎΠ»ΡΠ³Π°Π½Π³Ρ ΠΎΠΊΠΎΠ½ΡΠ΅Π½ΠΎ"); }, // Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°ΡΡ, Π΅Π³ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ: new KeyValue(tube.layoutXProperty(), stopPositionX, Interpolator.LINEAR) ); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ Π΄Π»Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΌΡ ΠΊΠ°Π΄ΡΡ: Timeline timeline = new Timeline(); timeline.getKeyFrames().add(keyFrame); timeline.setCycleCount(1); timeline.play(); } public void takeFrom(){ // ΠΠΎΠ½Π΅ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ: double stopPositionY = 216; KeyFrame keyFrame = new KeyFrame( // Π‘ΡΠΈΡΠ°Π΅ΠΌ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±ΡΠ΄Π΅Ρ Π΄Π»ΠΈΡΡΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ: Duration.millis((tube.getLayoutY() - stopPositionY) / 2 * 10), event -> { System.out.println("ΠΠ²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½ΠΎ"); }, // Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°ΡΡ, Π΅Π³ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ: new KeyValue(tube.layoutYProperty(), stopPositionY, Interpolator.LINEAR) ); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ Π΄Π»Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΌΡ ΠΊΠ°Π΄ΡΡ: Timeline timeline = new Timeline(); timeline.getKeyFrames().add(keyFrame); timeline.setCycleCount(1); timeline.play(); } 
Math.abs()for time - otherwise you will get an exception if the result is negative (in the example of sub-rules). - oshatrk