0
我已經用幾個形狀創建了一輛車,並使用PathTransition從窗格的一側移動到另一側。我試圖通過按鍵(上下箭頭)來實施行動事件,以加速或減速汽車。爲什麼鍵盤事件不能工作,即使我有鼠標事件工作?鍵盤操作在JavaFX中不能工作的事件
public class AnimatedCar extends Application {
@Override
public void start(Stage mainStage) throws Exception {
Pane pane = new Pane();
Group root = new Group();
// Create a line for the rectangle path
Line line = new Line();
line.setStartX(25);
line.setStartY(290);
line.setEndX(275);
line.setEndY(290);
line.setStroke(Color.TRANSPARENT);
pane.getChildren().add(line);
// Create the Back Wheel
Circle backWheel = new Circle();
backWheel.setRadius(5);
backWheel.setStroke(Color.BLACK);
backWheel.setFill(Color.BLACK);
backWheel.setCenterX(pane.getLayoutBounds().getWidth() + 20);
backWheel.setCenterY(pane.getLayoutBounds().getHeight() + 295);
root.getChildren().add(backWheel);
// Create the front wheel
Circle frontWheel = new Circle();
frontWheel.setRadius(5);
frontWheel.setStroke(Color.BLACK);
frontWheel.setFill(Color.BLACK);
frontWheel.setCenterX(pane.getLayoutBounds().getWidth() + 40);
frontWheel.setCenterY(pane.getLayoutBounds().getHeight() + 295);
root.getChildren().add(frontWheel);
// Create the rectangle part of the car body
Rectangle rec = new Rectangle(5, 280, 50, 10);
rec.setStroke(Color.BLUE);
rec.setFill(Color.BLUE);
root.getChildren().add(rec);
// Create polygon for the top trapezoid
Polygon trapezoid = new Polygon();
trapezoid.getPoints().addAll(new Double[] { 15.0, 280.0, 20.0, 270.0, 40.0, 270.0, 45.0, 280.0 });
trapezoid.setFill(Color.BLUE);
trapezoid.setStroke(Color.BLUE);
root.getChildren().add(trapezoid);
// connect the shapes together
pane.getChildren().add(root);
// Create a path transition for the rectanagle
PathTransition pt = new PathTransition();
pt.setRate(0.25);
pt.setPath(line);
pt.setNode(root);
pt.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
pt.setCycleCount(Timeline.INDEFINITE);
pt.setAutoReverse(false);
pt.play();
// Create the pause action on the pressed left mouse button
pane.setOnMousePressed(e -> {
pt.getStatus();
if (Status.RUNNING != null)
pt.pause();
});
pane.setOnMouseReleased(e -> {
pt.getStatus();
if (Status.STOPPED != null)
pt.play();
});
// Action events for key presses
pane.setOnKeyPressed(e -> {
if (e.getCode() == KeyCode.UP) {
pt.setRate((pt.getRate() + .03));
}
});
pane.setOnKeyTyped(e -> {
if (e.getCode() == KeyCode.DOWN) {
pt.setRate(pt.getRate() - 0.03);
}
});
// Put everything together!
Scene scene = new Scene(pane, 305, 305);
mainStage.setTitle("Racecar");
mainStage.setScene(scene);
mainStage.show();
}
// Main Method to start the program
public static void main(String[] args) {
launch(args);
}
}
我的猜測是你的窗格沒有焦點。嘗試在'mainStage.show()'後面調用'pane.requestFocus()'。 – ItachiUchiha
@IchichiUchiha Yup!這工作!謝謝一堆! – CadetFayed