JavaFX代码实现模拟汽车雨刷系统,通过按钮控制雨刷速度挡位
时间: 2024-05-01 09:22:42 浏览: 190
以下是一个简单的JavaFX代码实现,模拟汽车雨刷系统。我们使用了Slider控件来控制雨刷速度,使用Button控件来控制雨刷挡位。
```java
import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class CarWiper extends Application {
private int speed = 1; // 雨刷速度,初始值为1(最慢)
private int level = 0; // 雨刷挡位,初始值为0(关闭)
@Override
public void start(Stage primaryStage) {
// 雨刷图形
Rectangle wiper = new Rectangle(40, 200, Color.DARKGRAY);
StackPane wiperPane = new StackPane(wiper);
wiperPane.setPadding(new Insets(20));
// 雨刷速度控制
Label speedLabel = new Label("Speed:");
Slider speedSlider = new Slider(1, 5, 1);
speedSlider.setShowTickLabels(true);
speedSlider.setShowTickMarks(true);
speedSlider.setMajorTickUnit(1);
speedSlider.setMinorTickCount(0);
speedSlider.setSnapToTicks(true);
speedSlider.valueProperty().addListener((observable, oldValue, newValue) -> {
speed = newValue.intValue(); // 更新雨刷速度
});
HBox speedBox = new HBox(10, speedLabel, speedSlider);
speedBox.setAlignment(Pos.CENTER);
// 雨刷挡位控制
Button levelBtn1 = new Button("Level 1");
levelBtn1.setOnAction(event -> {
level = 1; // 更新雨刷挡位
});
Button levelBtn2 = new Button("Level 2");
levelBtn2.setOnAction(event -> {
level = 2; // 更新雨刷挡位
});
Button levelBtn3 = new Button("Level 3");
levelBtn3.setOnAction(event -> {
level = 3; // 更新雨刷挡位
});
Button levelBtnOff = new Button("OFF");
levelBtnOff.setOnAction(event -> {
level = 0; // 更新雨刷挡位
});
HBox levelBox = new HBox(10, levelBtn1, levelBtn2, levelBtn3, levelBtnOff);
levelBox.setAlignment(Pos.CENTER);
// 布局
BorderPane root = new BorderPane();
root.setTop(speedBox);
root.setCenter(wiperPane);
root.setBottom(levelBox);
// 雨刷动画
Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), event -> {
if (level != 0) { // 如果雨刷处于打开状态
wiper.setTranslateY(wiper.getTranslateY() - 40 * speed); // 更新雨刷位置
if (wiper.getTranslateY() < -200) { // 如果雨刷已经刷过一遍
wiper.setTranslateY(0); // 重置雨刷位置
}
}
}));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
// 窗口
Scene scene = new Scene(root, 300, 400);
primaryStage.setTitle("Car Wiper");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
```
运行这个程序,你会看到一个窗口,其中包含了一个Slider和四个Button。你可以通过Slider控制雨刷速度,通过Button控制雨刷挡位。当你打开雨刷时,雨刷会开始刷过屏幕,速度和挡位都会影响刷的速度和频率。
阅读全文