有没有办法在Java中直接检查其中一个鼠标按钮是否关闭而不使用事件,监听器等?我希望有一个线程,每100毫秒左右,检查一个鼠标按钮是否关闭,然后执行某些操作。因此,如果用户按住鼠标按钮一段时间,它将触发多个响应。
所以我正在寻找的是一种给出鼠标状态的方法,而不需要通过常规的事件处理系统。
感谢
答案 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,它允许您使用单个侦听器监听所有鼠标事件。
然后在听众中你会启动你的计时器。