按下Java鼠标-无事件

按下Java鼠标-无事件,java,Java,在Java中,有没有一种方法可以不使用事件、侦听器等直接检查某个鼠标按钮是否已按下?我希望有一个线程,每隔100毫秒左右,检查鼠标按钮是否按下,然后执行一些操作。因此,如果用户按住鼠标按钮一段时间,它将触发多个响应 所以我要寻找的是一种方法,它可以给出鼠标的状态,而不需要经过通常的事件处理系统 谢谢我不知道这是否可能——也许是 但是,您始终可以编写事件处理程序,其唯一任务是跟踪当前鼠标状态。然后您的100ms代码就可以查询它了。无论这是否可能,您确定要这样做吗 在我看来,这样你很可能会错过点击。

在Java中,有没有一种方法可以不使用事件、侦听器等直接检查某个鼠标按钮是否已按下?我希望有一个线程,每隔100毫秒左右,检查鼠标按钮是否按下,然后执行一些操作。因此,如果用户按住鼠标按钮一段时间,它将触发多个响应

所以我要寻找的是一种方法,它可以给出鼠标的状态,而不需要经过通常的事件处理系统


谢谢

我不知道这是否可能——也许是


但是,您始终可以编写事件处理程序,其唯一任务是跟踪当前鼠标状态。然后您的100ms代码就可以查询它了。

无论这是否可能,您确定要这样做吗

在我看来,这样你很可能会错过点击。100毫秒是十分之一秒。。很多点击不会持续那么久

即使你缩短了你的投票循环,你所做的就是缩小你可能错过点击的窗口,这样它错过点击的次数就会减少。但这仍然是一个比赛条件


我猜您对复杂性的担心源于必须处理线程问题,但除非您提供更多信息,否则我们无法为您提供太多帮助。

我认为这在Java中是不可能的。通过JNI这是可能的,但这是一个痛苦的世界

在活动中做到这一点并不难,而且会更好地与应用程序的其余部分集成。以下是按下鼠标按钮时每100毫秒向控制台写入一次的示例:

import javax.swing.*;
import java.awt.event.*;

public class Test {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        final JLabel label = new JLabel("Click on me and hold the mouse button down");
        label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        frame.getContentPane().add(label);
        label.addMouseListener(new TimingMouseAdapter());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private static class TimingMouseAdapter extends MouseAdapter {
        private Timer timer;

        public void mousePressed(MouseEvent e) {
            timer = new Timer(100, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Mouse still pressed...");
                }
            });
            timer.start();
        }

        public void mouseReleased(MouseEvent e) {
            if (timer != null) {
                timer.stop();
            }
        }

    }
}

在不同的时间段后修改此选项以执行不同的操作(例如更改画笔模式)应该是直接的

编写一个侦听器来处理鼠标状态应该很容易。有关AWTEventListener的介绍,请参阅,它允许您使用单个侦听器侦听所有鼠标事件


然后在侦听器中启动计时器。

我想到了这一点,但它有点复杂。我想我会尝试看看是否有人知道一种直接获取鼠标状态的方法,如果没有,那么就使用事件处理程序。100毫秒刚刚从我的头顶上落下,我计划用不同的时间进行实验。关于缺少点击的好观点。我正试图让鼠标作为图形程序的画笔工具工作,其中包括让程序根据鼠标按下的时间做出响应等。我想知道的是,是否有可能对鼠标状态进行这种低级的直接查询,然后我将进行实验,看看效果如何,或者使用它,或者尝试使用事件处理程序。对于绘画程序,我使用了MouseMotionListener并实现了mouseDragged()以允许绘制。