javafx编写一个最简单的 2 层楼的电梯管理模拟实验,假定电梯容纳 1 人,先来先上。
时间: 2023-06-27 17:08:07 浏览: 42
以下是一个简单的JavaFX电梯管理模拟实验的代码示例,其中电梯有两个楼层和容纳1人的限制。
```java
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class ElevatorSimulation extends Application {
private int currentFloor = 1; // 当前电梯所在楼层
private boolean isMoving = false; // 电梯是否在运动
private VBox passengers = new VBox(); // 电梯乘客列表
@Override
public void start(Stage primaryStage) {
// 创建电梯内部面板
BorderPane elevatorPane = new BorderPane();
Text elevatorText = new Text("当前楼层: " + currentFloor);
elevatorPane.setTop(elevatorText);
elevatorPane.setCenter(passengers);
// 创建控制电梯的按钮
Button floor1Button = new Button("1楼");
floor1Button.setOnAction(event -> moveElevator(1));
Button floor2Button = new Button("2楼");
floor2Button.setOnAction(event -> moveElevator(2));
HBox controlPane = new HBox(floor1Button, floor2Button);
controlPane.setAlignment(Pos.CENTER);
// 创建主面板
VBox root = new VBox(elevatorPane, controlPane);
Scene scene = new Scene(root, 300, 200);
primaryStage.setTitle("电梯管理模拟实验");
primaryStage.setScene(scene);
primaryStage.show();
}
// 控制电梯移动
private void moveElevator(int targetFloor) {
if (isMoving) {
return;
}
isMoving = true;
// 移动电梯
int direction = targetFloor - currentFloor;
Text directionText = new Text(direction > 0 ? "上" : "下");
BorderPane elevatorPane = (BorderPane) passengers.getParent();
elevatorPane.setTop(directionText);
for (int i = 0; i < Math.abs(direction); i++) {
try {
Thread.sleep(1000); // 等待1秒模拟电梯移动
} catch (InterruptedException e) {
e.printStackTrace();
}
currentFloor += direction > 0 ? 1 : -1;
elevatorPane.setTop(new Text("当前楼层: " + currentFloor));
}
elevatorPane.setTop(new Text("当前楼层: " + currentFloor));
// 乘客上下电梯
if (targetFloor == currentFloor) {
for (int i = 0; i < passengers.getChildren().size(); i++) {
passengers.getChildren().remove(i);
}
}
// 电梯停止运动
isMoving = false;
}
// 电梯内部添加乘客
private void addPassenger() {
if (passengers.getChildren().size() < 1) {
passengers.getChildren().add(new Text("乘客"));
}
}
public static void main(String[] args) {
launch(args);
}
}
```
在此示例中,电梯内部有一个`VBox`,用于存储当前乘客列表,并且在电梯移动时更新电梯所在楼层。控制面板上有两个按钮,分别对应1楼和2楼,点击按钮可以控制电梯移动到目标楼层。当电梯到达目标楼层时,如果乘客在电梯内,则会下电梯,如果没有乘客,则电梯会保持空闲状态。