当前位置: 首页 > 知识库问答 >
问题:

如何在JavaFX中检测鼠标单击?

辛盛
2023-03-14

所以我开始在我的应用程序中为不同的功能设置键,我想知道是否有一种方法可以设置鼠标左键或右键来执行某些操作?我在keycode.java中找不到任何鼠标事件,我不知道如何应用它。

下面是我的代码:

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);
        }
    }
}

我要完成的是使右键点击你的鼠标按钮停止移动,左键点击再次开始。我该怎么做?谢谢你。

共有1个答案

锺离宸
2023-03-14

您的事件是KeyEvent。如果您为鼠标定义了一个监听器(例如SetonMouseReleased,您将得到一个MouseEvent,在这个监听器上,您有一些函数来检查是否按下了某些通常与鼠标单击结合在一起的键:

event.isAltDown();
event.isControlDown();
event.isMetaDown();

如果你需要更多的东西,你必须自己去实现它。请参阅mouseEvent的JavaDoc。

 类似资料:
  • 我想知道如何编写代码来检测鼠标点击精灵。例如:

  • 有可用的组合键方法如下: 是否有任何方法可以捕获鼠标点击或触摸屏亭的任何组合以退出全屏锁定?

  • 我正在尝试捕捉Java中的鼠标/按键事件,即使应用程序窗口没有被聚焦。我正在创建一个类似于屏幕记录器的东西,我想通过按一个像“F9”这样的键来停止记录,所以我需要检测事件。这可能吗?有什么类似系统监听器的东西我可以使用吗? ~亨利

  • 问题内容: 我试图检测何时在NSTableView中发生鼠标单击,以及何时 发生,以确定所单击的单元格的行和列。 到目前为止,我尝试使用NSTableViewSelectionDidChangeNotification,但是存在 两个问题: 它仅在选择更改时触发,而我希望每次单击鼠标,即使它在当前选择的行上也是如此。 调用我的委托时,NSTableView的clickedRow和clickedCo

  • 问题内容: 我试图检测何时在NSTableView中发生鼠标单击,以及何时发生,以确定所单击的单元格的行和列。 到目前为止,我尝试使用NSTableViewSelectionDidChangeNotification,但是存在两个问题: 它仅在选择更改时触发,而我希望每次单击鼠标,即使它在当前选择的行上也是如此。 调用我的委托时,NSTableView的clickedRow和clickedColu

  • 问题内容: 有没有一种方法可以检测到右键单击,然后在IE和Firefox上粘贴JavaScript的方法? 更新: 我决定使用Jquery来做到这一点: 这并不是我所需要的(因为它在’ctrl + v’以及’右键单击+粘贴’中被触发,但是我可以解决它。 在Chrome,Firefox 3,IE 7和IE 6上对其进行了测试,并且可以正常工作 问题答案: 使用IE,您可以粘贴 使用Mozilla,您