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