Java鼠标按下 - 没有事件

时间:2009-09-03 10:17:53

标签: java

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

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

感谢

4 个答案:

答案 0 :(得分:4)

我不知道这是否可能 - 也许是。

但是,您始终可以编写一个事件处理程序,其唯一的工作是跟踪当前的鼠标状态。那么你的100ms代码就可以查询它。

答案 1 :(得分:4)

我相信这在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();
            }
        }

    }
}

修改此项以在不同时段之后执行不同的操作(例如更改画笔模式)应该是直截了当的。

答案 2 :(得分:2)

是否有可能,你确定要这样做吗?

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

即使你缩短投票周期,你所做的只是缩小窗口,在此期间你可能会错过点击,因此它会更少地忽略点击次数。但它仍然是一种竞争条件。

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

答案 3 :(得分:0)

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

然后在听众中你会启动你的计时器。