Re: Property updates

goddard at goddard at
Mon Jun 11 03:48:42 PDT 2012

This is the output from the println statements:
centerXDoubleProperty [bean: Circle at 157a5c3, name: centerX, value: 396.34924225837125]
x: DoubleProperty [value: 396.34924225837125]
centerXDoubleProperty [bean: Circle at 157a5c3, name: centerX, value: 396.34924225837125]
x: DoubleProperty [value: 563.9584002793741]
centerXDoubleProperty [bean: Circle at 157a5c3, name: centerX, value: 396.34924225837125]
x: DoubleProperty [value: 337.0834495091644]

As you can see, the centerX value doesn't change at all. Any help is appreciated.

Regards, jiri

------------ Původní zpráva ------------
Od:  <goddard at>
Předmět: Property updates
Datum: 10.6.2012 22:54:59

the following code should create a Circle at random coords and animate the
translation to random coords. The point is to randomly translate the circle from
one location to another successively:

package boyle;

import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.animation.TimelineBuilder;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.CircleBuilder;
import javafx.stage.Stage;
import javafx.util.Duration;

 * @author jiri
public class Boyle extends Application {

    public static final int WIDTH = 800;
    public static final int HEIGHT = 512;
     * @param args the command line arguments
    public static void main(String[] args) {
    // end the animation at random coords
    private DoubleProperty x = new SimpleDoubleProperty(Math.random() * WIDTH);
    private DoubleProperty y = new SimpleDoubleProperty(Math.random() *
    @Override public void start(Stage primaryStage) {
        final Circle c = CircleBuilder.create()
                // start the animation at random coords
                .centerX(Math.random() * WIDTH)
                .centerY(Math.random() * HEIGHT)
        final DoubleProperty[] randCoords = {x, y};
        final Timeline t = TimelineBuilder.create()
                .keyFrames(new KeyFrame(Duration.seconds(5),
                new KeyValue(c.centerXProperty(), randCoords[0].get()),
                new KeyValue(c.centerYProperty(), randCoords[1].get())))
        // refreshes coords at every end of the animation
        t.setOnFinished(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent ae) {
                System.out.println("centerX"+ c.centerXProperty());
                // set animation end coords to the target
                System.out.println("x: "+ randCoords[0]);
                // generate new coords for the animation end
                randCoords[0].set(Math.random() * WIDTH);
                randCoords[1].set(Math.random() * HEIGHT);
        Group root = new Group();
        Scene scene = new Scene(root, WIDTH, HEIGHT);
        primaryStage.setTitle("@javafxcz - Boyle -");

However, the circle appears moving to its target coords instead to its end
coords, and update of the target coords doesn't work - unlike for the end
coords. Plus, there's a significant 1-2 seconds long pause before the animation
starts again in the handler, but just for the first time. Then it runs
Help in form of explanation / code sample is appreciated.

Regards, Jiri

More information about the openjfx-dev mailing list