Java ООП с использованием Translate Transition и JavaFX - PullRequest
0 голосов
/ 03 февраля 2019

Переводить перевод не выводится.Он использует метод в основном классе.Я считаю, что это не работает, потому что он используется как объект.Должен быть другой код для реализации.Он использует метод в основном, а затем помещает его в тестер.Однако я не знаю, как его использовать, потому что он также использует конструктор / объект.Затем объект превращается и превращается в узел, который я изменил.I do not know how the Translate Transition method is attached to the object and displays it into the javafx console. Пожалуйста, помогите решить проблему за положительный отзыв, как он показывает.

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 Ответ

0 голосов
/ 03 февраля 2019

В комментарии вы говорите: «Это не работает».Проблема trans.setNode(root), которая пытается сделать root "Целевым узлом этого TranslateTransition."Ваша реализация calculateTt() уже указывает this.shape в качестве целевого узла.Вместо этого добавьте подходящий метод доступа к AnxiousShapes и используйте переход в том виде, в котором он создан;следующие изменения проиллюстрированы ниже:

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();

image

...