Reputation: 282
So I started playing around with setting up key for different functions in my application and I was wondering is there a way to set the right/left mouse click to do something? I was not able to find any mouse events in the KeyCode.java And I am not sure how to application that.
Here is my code:
public class Exercise_31 extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
PendulumPane pendulumPane = new PendulumPane(500, 500);
Scene scene = new Scene(pendulumPane);
primaryStage.setTitle("Pendulum Animation");
primaryStage.setScene(scene);
pendulumPane.play();
primaryStage.show();
scene.setOnKeyPressed(e-> {
switch (e.getCode()) {
case UP: pendulumPane.increase(); break;
case DOWN: pendulumPane.decrease(); break;
case LEFTMOUSECLICK?
}
});
}
public static void main(String[] args) {
Application.launch(args);
}
private class PendulumPane extends Pane {
private double w = 400;
private double h;
PathTransition bPath;
Circle topC;
Circle lowerC;
Line line;
Arc arc;
PendulumPane(double width, double height) {
w = width;
h = height;
setPrefWidth(w);
setPrefHeight(h);
arc = new Arc(w / 2, h * 0.8, w * 0.15, w * 0.15, 180, 180);
arc.setFill(Color.TRANSPARENT);
arc.setStroke(Color.BLACK);
lowerC = new Circle(arc.getCenterX() - arc.getRadiusX(), arc.getCenterY(), 10);
topC = new Circle(arc.getCenterX(), arc.getCenterY() - h / 2, lowerC.getRadius() / 2);
arc = new Arc(topC.getCenterX(), topC.getCenterY(), w / 2, h / 2, 240, 60);
line = new Line(
topC.getCenterX(), topC.getCenterY(),
lowerC.getCenterX(), lowerC.getCenterY());
line.endXProperty().bind(lowerC.translateXProperty().add(lowerC.getCenterX()));
line.endYProperty().bind(lowerC.translateYProperty().add(lowerC.getCenterY()));
bPath = new PathTransition();
bPath.setDuration(Duration.millis(4000));
bPath.setPath(arc);
bPath.setNode(lowerC);
bPath.setOrientation(PathTransition.OrientationType.NONE);
bPath.setCycleCount(PathTransition.INDEFINITE);
bPath.setAutoReverse(true);
getChildren().addAll(lowerC, topC,line);
}
public void play() {
bPath.play();
}
public void increase() {
bPath.setRate(bPath.getCurrentRate() + 1);
}
public void decrease() {
bPath.setRate(bPath.getCurrentRate() - 1);
}
public void stop() {
bPath.setRate(bPath.getCurrentRate() * 0);
}
public void start() {
bPath.setRate(bPath.getCurrentRate() + 1);
}
}
}
What I am trying to accomplish is to make right clicking your mouse button stop the movement and left clicking start it again. How would I do that? Thank you.
Upvotes: 2
Views: 7607
Reputation: 7496
Your event is a KeyEvent
. If you define a listener on for the mouse (e.g. setOnMouseReleased
you get a MouseEvent
and on that one you have functions to check if certain keys are pressed that are usually combined with a mouse click:
event.isAltDown();
event.isControlDown();
event.isMetaDown();
If you need something more you will have to implement it yourself. See the JavaDoc for MouseEvent.
Upvotes: 3