Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Problem with using EventHandlers in this JavaFX program: Hello all, I am working

ID: 657129 • Letter: P

Question

Problem with using EventHandlers in this JavaFX program:

Hello all, I am working on a program which animates a ball moving on a sine wave. In the event handler, I am having troubles with getting the EventHandler class to recognize the variable pt. I am aware it is not in scope, but I am somewhat confused to how I can implement this.

package application;

import javafx.animation.PathTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.SplitPane;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.CubicCurve;
import javafx.scene.shape.Line;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.QuadCurveTo;
import javafx.stage.Stage;
import javafx.util.Duration;

public class BallOnCurve extends Application implements
       EventHandler<ActionEvent> {

   Button button;

   public static void main(String[] args) {
       launch(args);

   }

   @Override
   public void start(Stage primaryStage) throws Exception {
       primaryStage.setTitle("Animation: Ball on Curve");

       button = new Button();
       button.setText("Set Color");
       button.setOnAction(new EventHandler<ActionEvent>() {
           // annonymous inner class
           @Override
           public void handle(ActionEvent event) {
               // do something
           }
       });

       BorderPane layout = new BorderPane();
       layout.setTop(getSPaneCurve());
       layout.setBottom(getHBoxButtons());

       // render the nodes
       Scene scene = new Scene(layout, 300, 500);
       primaryStage.setScene(scene);
       primaryStage.show();

   }

   public StackPane getSPaneCurve() {
       StackPane graph = new StackPane();

       // create the curve
       Path path = new Path();

       MoveTo moveTo = new MoveTo();
       moveTo.setX(0);
       moveTo.setY(100);

       QuadCurveTo p2 = new QuadCurveTo();
       p2.setX(30f);
       p2.setY(40f);
       p2.setControlX(5f);
       p2.setControlY(50f);

       QuadCurveTo p3 = new QuadCurveTo();
       p3.setX(60f);
       p3.setY(100f);
       p3.setControlX(50f);
       p3.setControlY(40f);

       QuadCurveTo p4 = new QuadCurveTo();
       p4.setX(100f);
       p4.setY(160f);
       p4.setControlX(70f);
       p4.setControlY(155f);

       QuadCurveTo p5 = new QuadCurveTo();
       p5.setX(130f);
       p5.setY(100f);
       p5.setControlX(125f);
       p5.setControlY(155f);

       QuadCurveTo p6 = new QuadCurveTo();
       p6.setX(160f);
       p6.setY(40f);
       p6.setControlX(140f);
       p6.setControlY(50f);

       QuadCurveTo p7 = new QuadCurveTo();
       p7.setX(200f);
       p7.setY(100f);
       p7.setControlX(180f);
       p7.setControlY(30f);

       QuadCurveTo p8 = new QuadCurveTo();
       p8.setX(240f);
       p8.setY(160f);
       p8.setControlX(210f);
       p8.setControlY(150f);

       QuadCurveTo p9 = new QuadCurveTo();
       p9.setX(280f);
       p9.setY(100f);
       p9.setControlX(270f);
       p9.setControlY(160f);

       path.getElements().add(moveTo);
       path.getElements().add(p2);
       path.getElements().add(p3);
       path.getElements().add(p4);
       path.getElements().add(p5);
       path.getElements().add(p6);
       path.getElements().add(p7);
       path.getElements().add(p8);
       path.getElements().add(p9);
       path.setFill(new Color(1, 0, 0, 0));
       path.setStrokeWidth(3);

       Line hline = new Line();
       hline.setStartX(0.0);
       hline.setStartY(100.0);
       hline.setEndX(280.0f);
       hline.setEndY(100.0f);

       Line vline = new Line();
       vline.setStartX(130.0f);
       vline.setStartY(0.0f);
       vline.setEndX(130.0f);
       vline.setEndY(200.0f);

       Circle circle = new Circle(125, 100, 50);
       circle.setFill(Color.WHITE);
       circle.setStroke(Color.BLACK);

       PathTransition pt = new PathTransition();
       pt.setDuration(Duration.millis(4000));
       pt.setPath(circle);
       pt.setNode(path);
       pt.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
       pt.setCycleCount(Timeline.INDEFINITE);
       pt.setAutoReverse(true);
       pt.play();

       graph.getChildren().addAll(path, hline, vline);

       return graph;
   }

   public HBox getHBoxButtons() {
       HBox hBox = new HBox(15);
       hBox.setPadding(new Insets(15, 5, 5, 5));

       return hBox;

   }

   private EventHandler<KeyEvent> keyListener = new EventHandler<KeyEvent>() {
       @Override
       public void handle(KeyEvent event) {
           //Up: Play Animation
           //Down: Pause Animation
           //Left: Slow Down Animation
           //Right: Play Animation
           if (event.getCode() == KeyCode.UP
                   || event.getCode() == KeyCode.DOWN
                   || event.getCode() == KeyCode.RIGHT
                   || event.getCode() == KeyCode.LEFT) {
               try {
                   if(event.getCode() == KeyCode.UP){
                       pt.pause();
                   }
                   if(event.getCode() ==KeyCode.DOWN) {
                       pt.play();
                   }
               } catch (Exception e) {
                   e.printStackTrace();
               }
           }
       }
   };

   // Event Handler
   @Override
   public void handle(ActionEvent event) {

   }

}

Explanation / Answer

import javafx.animation.PathTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.SplitPane;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.CubicCurve;
import javafx.scene.shape.Line;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.QuadCurveTo;
import javafx.stage.Stage;
import javafx.util.Duration;

public class BallOnCurve extends Application implements
EventHandler<ActionEvent> {

Button button;

public static void main(String[] args) {
launch(args);

}

@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Animation: Ball on Curve");

button = new Button();
button.setText("Set Color");
button.setOnAction(new EventHandler<ActionEvent>() {
button = new button();
button.add(btStart);
button.add(btStop);   
add(buttonl, BorderLayout.center);
btStart.addActionListener(new StartcoloringBallTest());
btStop.addActionListener(new StopcoloringBallTest());
       }   
public void handle(ActionEvent event) {
launch(args) ;
}
});

BorderPane layout = new BorderPane();
layout.setTop(getSPaneCurve());
layout.setBottom(getHBoxButtons());   
Scene scene = new Scene(layout, 300, 500);
primaryStage.setScene(scene);
primaryStage.show();

}

public StackPane getSPaneCurve() {
StackPane graph = new StackPane();
Path path = new Path();
MoveTo moveTo = new MoveTo();
moveTo.setX(0);
moveTo.setY(100);
QuadCurveTo p2 = new QuadCurveTo();
p2.setX(30f);
p2.setY(40f);
p2.setControlX(5f);
p2.setControlY(50f);

QuadCurveTo p3 = new QuadCurveTo();
p3.setX(60f);
p3.setY(100f);
p3.setControlX(50f);
p3.setControlY(40f);

QuadCurveTo p4 = new QuadCurveTo();
p4.setX(100f);
p4.setY(160f);
p4.setControlX(70f);
p4.setControlY(155f);

QuadCurveTo p5 = new QuadCurveTo();
p5.setX(130f);
p5.setY(100f);
p5.setControlX(125f);
p5.setControlY(155f);

QuadCurveTo p6 = new QuadCurveTo();
p6.setX(160f);
p6.setY(40f);
p6.setControlX(140f);
p6.setControlY(50f);

QuadCurveTo p7 = new QuadCurveTo();
p7.setX(200f);
p7.setY(100f);
p7.setControlX(180f);
p7.setControlY(30f);

QuadCurveTo p8 = new QuadCurveTo();
p8.setX(240f);
p8.setY(160f);
p8.setControlX(210f);
p8.setControlY(150f);

QuadCurveTo p9 = new QuadCurveTo();
p9.setX(280f);
p9.setY(100f);
p9.setControlX(270f);
p9.setControlY(160f);

path.getElements().add(moveTo);
path.getElements().add(p2);
path.getElements().add(p3);
path.getElements().add(p4);
path.getElements().add(p5);
path.getElements().add(p6);
path.getElements().add(p7);
path.getElements().add(p8);
path.getElements().add(p9);
path.setFill(new Color(1, 0, 0, 0));
path.setStrokeWidth(3);

Line hline = new Line();
hline.setStartX(0.0);
hline.setStartY(100.0);
hline.setEndX(280.0f);
hline.setEndY(100.0f);

Line vline = new Line();
vline.setStartX(130.0f);
vline.setStartY(0.0f);
vline.setEndX(130.0f);
vline.setEndY(200.0f);

Circle circle = new Circle(125, 100, 50);
circle.setFill(Color.WHITE);
circle.setStroke(Color.BLACK);

PathTransition pt = new PathTransition();
pt.setDuration(Duration.millis(4000));
pt.setPath(circle);
pt.setNode(path);
pt.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
pt.setCycleCount(Timeline.INDEFINITE);
pt.setAutoReverse(true);
pt.play();

graph.getChildren().addAll(path, hline, vline);

return graph;
}

public HBox getHBoxButtons() {
HBox hBox = new HBox(15);
hBox.setPadding(new Insets(15, 5, 5, 5));

return hBox;

}

private EventHandler<KeyEvent> keyListener = new EventHandler<KeyEvent>() {
public void handle(KeyEvent event) {
//Up: Play Animation
//Down: Pause Animation
//Left: Slow Down Animation
//Right: Play Animation
if (event.getCode() == KeyCode.UP
|| event.getCode() == KeyCode.DOWN
|| event.getCode() == KeyCode.RIGHT
|| event.getCode() == KeyCode.LEFT) {
try {
if(event.getCode() == KeyCode.UP){
pt.pause();
}
if(event.getCode() ==KeyCode.DOWN) {
pt.play();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void handle(ActionEvent event)
{
   launch(args) ;
}

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote