Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package bounceballcontrol;
- import javafx.application.Application;
- import javafx.stage.Stage;
- import javafx.scene.Scene;
- import javafx.scene.input.KeyCode;
- public class BounceBallControl extends Application {
- @Override // Override the start method in the Application class
- public void start(Stage primaryStage) {
- BallPane ballPane = new BallPane(); // Create a ball pane
- // Pause and resume animation
- ballPane.setOnMousePressed(e -> ballPane.pause());
- ballPane.setOnMouseReleased(e -> ballPane.play());
- // Increase and decrease animation
- ballPane.setOnKeyPressed(e -> {
- if (e.getCode() == KeyCode.UP) {
- ballPane.increaseSpeed();
- }
- else if (e.getCode() == KeyCode.DOWN) {
- ballPane.decreaseSpeed();
- }
- });
- // Create a scene and place it in the stage
- Scene scene = new Scene(ballPane, 250, 150);
- primaryStage.setTitle("BounceBallControl"); // Set the stage title
- primaryStage.setScene(scene); // Place the scene in the stage
- primaryStage.show(); // Display the stage
- // Must request focus after the primary stage is displayed
- ballPane.requestFocus();
- }
- /**
- * The main method is only needed for the IDE with limited
- * JavaFX support. Not needed for running from the command line.
- */
- public static void main(String[] args) {
- launch(args);
- }
- }
- =======================================================================================================================================
- package bounceballcontrol;
- import javafx.animation.KeyFrame;
- import javafx.animation.Timeline;
- import javafx.beans.property.DoubleProperty;
- import javafx.scene.layout.Pane;
- import javafx.scene.paint.Color;
- import javafx.scene.shape.Circle;
- import javafx.util.Duration;
- public class BallPane extends Pane {
- public final double radius = 20;
- private double x = radius, y = radius;
- private double dx = 5, dy = 2;
- private Circle circle = new Circle(x, y, radius);
- private Timeline animation;
- public BallPane() {
- circle.setFill(Color.ORANGE); // Set ball color
- getChildren().add(circle); // Place a ball into this pane
- // Create an animation for moving the ball
- animation = new Timeline(
- new KeyFrame(Duration.millis(50), e -> moveBall()));
- animation.setCycleCount(Timeline.INDEFINITE);
- animation.play(); // Start animation
- }
- public void play() {
- animation.play();
- }
- public void pause() {
- animation.pause();
- }
- public void increaseSpeed() {
- animation.setRate(animation.getRate() + 0.1);
- }
- public void decreaseSpeed() {
- animation.setRate(
- animation.getRate() > 0 ? animation.getRate() - 0.1 : 0);
- }
- public DoubleProperty rateProperty() {
- return animation.rateProperty();
- }
- protected void moveBall() {
- // Check boundaries
- if (x < radius || x > getWidth() - radius) {
- dx *= -1; // Change ball move direction
- }
- if (y < radius || y > getHeight() - radius) {
- dy *= -1; // Change ball move direction
- }
- // Adjust ball position
- x += dx;
- y += dy;
- circle.setCenterX(x);
- circle.setCenterY(y);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment