在 javafx 中移动圆圈改变颜色

Moving circle changing color in javafx

我希望我的球每次点击它时都会改变颜色,但我无法让它工作。我也想知道我的球的运动。我想知道你如何改变它的前进道路。所以它可以上下和其他方式而不是仅仅从左到右。

import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.geometry.Rectangle2D;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.effect.Bloom;
import javafx.scene.effect.Effect;
import javafx.scene.effect.Glow;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
import javafx.scene.effect.MotionBlur;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.util.Duration;

public class TimelineSample extends Application {

    Timeline timeline;

    private void init(Stage primaryStage) {

        Group root = new Group();
        primaryStage.setResizable(false);
        primaryStage.setScene(new Scene(root, 280, 120));

        Circle circle = new Circle(25, 25, 20, Color.BLUE);

        Light.Distant light = new Light.Distant();
        light.setAzimuth(-135.0);

        Lighting lighting = new Lighting();
        lighting.setLight(light);
        lighting.setSurfaceScale(5.0);
        circle.setEffect(lighting);

        timeline = new Timeline();
        timeline.setCycleCount(Timeline.INDEFINITE);
        timeline.setAutoReverse(true);
        timeline.getKeyFrames().addAll

        (new KeyFrame(Duration.ZERO, new KeyValue(circle.translateXProperty(),
                0)),
                new KeyFrame(new Duration(4000), new KeyValue(circle
                        .translateXProperty(), 205)));

        root.getChildren().add(circle);

        root.requestFocus();
        root.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) {
                timeline.play();
                circle.setFill(Color.PINK);
            }

        });

        root.setOnMousePressed(event -> {

            if (circle.contains(event.getX(), event.getY())) {
                circle.setFill(Color.BLACK);
                if (circle.getFill().equals(Color.BLACK))
                    circle.setFill(Color.YELLOW);
                else if (circle.getFill().equals(Color.BLUE))
                    circle.setFill(Color.BROWN);
                else if (circle.getFill().equals(Color.YELLOW))
                    circle.setFill(Color.BROWN);
                else if (circle.getFill().equals(Color.BROWN))
                    circle.setFill(Color.BLACK);
            }

        });

    }

    @Override
    public void stop() {
        timeline.stop();
    }

    @Override
    public void start(Stage primaryStage) throws Exception {

        init(primaryStage);
        primaryStage.show();

    }

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

}

它不会改变颜色(只改变一次黄色),因为在你检查之前你将它设置为黑色然后它被转换为黄色。

if (circle.contains(event.getX(), event.getY())) {
    circle.setFill(Color.BLACK); // <-- so it is black
    if (circle.getFill().equals(Color.BLACK)) // <-- uhh..it is black..let's change to yellow
         circle.setFill(Color.YELLOW);
    else if (circle.getFill().equals(Color.BLUE))
         circle.setFill(Color.BROWN);
    else if (circle.getFill().equals(Color.YELLOW))
         circle.setFill(Color.BROWN);
    else if (circle.getFill().equals(Color.BROWN))
         circle.setFill(Color.BLACK);
}

它是从左到右的,因为您使用的是 X-属性 而不是 Y-属性。