Java OOP using Translate Transition and JavaFX

不羁岁月 提交于 2019-12-25 01:49:09

问题


The Translate Transition does not output. It uses a method in the main class. I believe it is not working because it is used as an object. There has to be a different code to implement. It uses a method in a main and then puts it into a tester. However, I do not know how to use it because it uses a constructor/object as well. Then, the object turns and changes into a node which I changed it. I do not know how the Translate Transition method is attached to the object and displays it into the javafx console. Please help solve the problem for positive feedback as it shows.

import javafx.animation.TranslateTransition;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Shape;
import javafx.util.Duration;

public class AnxiousShapes {

    private Shape shape;
    private double delay ;
    private int howFarToMoveX;
    private int howFarToMoveY;

    public AnxiousShapes(int type, int x, int y, int size, double delay, Color color, int hftmX, int hftmY) {
        if (type == 0) {shape = new Circle(x, y, size, color);}
        //these are the only lines you can change
        //in this main class
        //else if (type == 1){shape = new Rectangle(x,y,color);}
        //else if (type == 2){shape = new Polygon();} 
        //else if (type == 3) {shape = new Circle(x, y, size, color);}
        //else { System.out.println("Error in type");shape = new  
        //Circle(???????);}
        this.delay = delay;
        this.howFarToMoveX = hftmX;
        this.howFarToMoveY = hftmY;
    }

    // getter and setters

    public TranslateTransition calculateTt() {
        TranslateTransition tt = new TranslateTransition(Duration.seconds(this.delay), this.shape); 
        tt.setToX(this.shape.getLayoutX() + howFarToMoveX);
        tt.setToY(shape.getLayoutY() + howFarToMoveY);  
        // Let the animation run forever -- if the shape
        // tries to move "off-screen" it will return to the beginning
        tt.setCycleCount(TranslateTransition.INDEFINITE);
        return tt;
    }

    @Override
    public String toString() {
        return "AnxiousShape [shape=" + shape + ", delay=" + delay + ", howFarToMoveX=" + howFarToMoveX
                + ", howFarToMoveY=" + howFarToMoveY + "]";
    }
}


import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;
import javafx.scene.Group;
import javafx.scene.Node;

import java.util.Random;

public class AnxiousShapesTester extends Application {

    @Override
    public void start(Stage stage) {

        // adding the new things
        Group root = new Group();

        stage.setTitle("Welcome to JavaFX!");

        // create the shape circle 
        AnxiousShapes circle1 = new AnxiousShapes(0, 200, 200, 50, 15, 
        Color.GREEN, 10 ,35);
        root.getChildren().add(circle1.getShape());

//      this does not work
//      TranslateTransition trans = circle1.calculateTt();
//      trans.setNode(root);
//      trans.play();
//      and I tried this and I already have the movement in constructor for 
//      delay and x and y but TranslateTransition 
//      asks for duration.millis(500)
        TranslateTransition tt = new 
        TranslateTransition(Duration.millis(500), root);
        tt.play();

        Scene scene = new Scene(root, 600, 600, Color.WHITE);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);

    }

}

回答1:


In a comment, you say, "this does not work." The problem is trans.setNode(root), which attempts to make root "The target node of this TranslateTransition." Your implementation of calculateTt() already specifies this.shape as the target node. Instead, add a suitable accessor to AnxiousShapes and use the transition as constructed; the following changes are illustrated below:

public Shape getShape() { return this.shape; }
…
AnxiousShapes circle1 = new AnxiousShapes(0, 100, 100, 100, 3, Color.GREEN, 400, 400);
root.getChildren().add(circle1.getShape());
TranslateTransition trans = circle1.calculateTt();
trans.play();



来源:https://stackoverflow.com/questions/54505040/java-oop-using-translate-transition-and-javafx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!