如何查看使用 MouseListener 按住 JButton 的时间

How to see how long a JButton is held down for using a MouseListener

我有一个简单的class:

public class MyButton extends JToggleButton {
    public MyButton() {
        super();
        this.addMouseListener(new MouseAdapter() {
            public mousePressed(MouseEvent event) {
                // See if it has been pressed for two seconds here
            }
        }
    });
}

我只想在用户按住两秒钟后打印 "Hello World!"

您可以使用 Swing Timer 来实现它,该 Swing TimermousePressed 开始并在 X 秒后触发,但在 onMouseReleased.

停止

考虑这个 class:

public class ClickHoldMouseListener extends MouseAdapter {
        private Timer fireTimer;
        private MouseEvent lastEvent;

        public ClickHoldMouseListener(int holdTime, Consumer<MouseEvent> eventConsumer) {
            fireTimer = new Timer(holdTime, e -> eventConsumer.accept(lastEvent));
            fireTimer.setRepeats(false);
        }

        @Override
        public void mousePressed(MouseEvent e) {
            lastEvent = e;
            fireTimer.restart();
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            fireTimer.stop();
        }
    }

现在,您可以将它添加到您的按钮中:

JButton button = new JButton("button");
button.addMouseListener(new ClickHoldMouseListener(2000, (event) -> {
    System.out.println("Mouse click was hold for 2seconds.");
}));

注意注入的事件是mousePressed方法中的鼠标事件。您可以将消费者更改为 Runnable 以忽略事件,或更改为 Consumer<ActionEvent> 以捕获计时器事件。