我敢肯定这是可能的,但是我所有的搜索都空白了。
在Java中,是否可以在Java应用程序之外注册鼠标移动事件?因此,如果鼠标指针移动到屏幕上的任何地方,我都会回电。轮询可能是近似值,MouseInfo.getPointerInfo
但必须有更好的方法。
谢谢
解释用例:它仅用于一个宠物项目,但是基本上是当鼠标击中屏幕边缘时触发事件。我还认为,如果您尝试 超越
屏幕边缘,可能会触发其他事件。为此,我认为鼠标运动侦听器可能更合适。
java.awt.event.MouseMotionListener
只会为您提供有关鼠标在应用程序窗口内移动的信息。对于在该窗口外发生的事件,没有办法解决MouseInfo.getPointerInfo
。但是,您可以编写一个(可能是单例的)类,该类定期轮询指针信息并允许MouseMotionListeners
添加:
import java.awt.Component;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
/**
* This class checks the position every #DELAY milliseconds and
* informs all registered MouseMotionListeners about position updates.
*/
public class MouseObserver {
/* the resolution of the mouse motion */
private static final int DELAY = 10;
private Component component;
private Timer timer;
private Set<MouseMotionListener> mouseMotionListeners;
protected MouseObserver(Component component) {
if (component == null) {
throw new IllegalArgumentException("Null component not allowed.");
}
this.component = component;
/* poll mouse coordinates at the given rate */
timer = new Timer(DELAY, new ActionListener() {
private Point lastPoint = MouseInfo.getPointerInfo().getLocation();
/* called every DELAY milliseconds to fetch the
* current mouse coordinates */
public synchronized void actionPerformed(ActionEvent e) {
Point point = MouseInfo.getPointerInfo().getLocation();
if (!point.equals(lastPoint)) {
fireMouseMotionEvent(point);
}
lastPoint = point;
}
});
mouseMotionListeners = new HashSet<MouseMotionListener>();
}
public Component getComponent() {
return component;
}
public void start() {
timer.start();
}
public void stop() {
timer.stop();
}
public void addMouseMotionListener(MouseMotionListener listener) {
synchronized (mouseMotionListeners) {
mouseMotionListeners.add(listener);
}
}
public void removeMouseMotionListener(MouseMotionListener listener) {
synchronized (mouseMotionListeners) {
mouseMotionListeners.remove(listener);
}
}
protected void fireMouseMotionEvent(Point point) {
synchronized (mouseMotionListeners) {
for (final MouseMotionListener listener : mouseMotionListeners) {
final MouseEvent event =
new MouseEvent(component, MouseEvent.MOUSE_MOVED, System.currentTimeMillis(),
0, point.x, point.y, 0, false);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
listener.mouseMoved(event);
}
});
}
}
}
/* Testing the ovserver */
public static void main(String[] args) {
JFrame main = new JFrame("dummy...");
main.setSize(100,100);
main.setVisible(true);
MouseObserver mo = new MouseObserver(main);
mo.addMouseMotionListener(new MouseMotionListener() {
public void mouseMoved(MouseEvent e) {
System.out.println("mouse moved: " + e.getPoint());
}
public void mouseDragged(MouseEvent e) {
System.out.println("mouse dragged: " + e.getPoint());
}
});
mo.start();
}
}
请注意,尽管与标准的MouseMotionListener有一些明显的不同:
mouseMoved
事件,不会收到mouseDragged
事件。这是因为无法在主窗口之外接收有关单击的信息。modifiers
每个的MouseEvent
始终为0。clickCount
,popupTrigger
,button
java.awt.Component
将用作MouseEvent
s (伪)源的虚拟对象- null
此处不允许使用值。我想让我的应用程序检测鼠标点击在屏幕上的任何地方,而不必使应用程序聚焦。我想要它检测鼠标事件普遍,即使它最小化。到目前为止,我只能在swing GUI中检测鼠标事件。 Autohotkey可以随时检测鼠标点击并获得鼠标的位置,用Java怎么做到这一点呢?
问题内容: 是否可以检测到我的应用程序之外屏幕上任何地方的鼠标单击? 我已经用C#编写了一个应用程序来执行此操作,但是我想用Java编写一个该程序的版本,以便它可以在多个平台上运行。 看起来我可以随时获取鼠标的坐标,但是我不确定如何监听鼠标的单击。 在C#中,我曾经检测过是否单击了鼠标按钮,但是如果我希望保持“干净”以便在多个平台上使用,显然就不能使用它。 问题答案: 您只能通过特定平台的OS A
我正在尝试捕捉Java中的鼠标/按键事件,即使应用程序窗口没有被聚焦。我正在创建一个类似于屏幕记录器的东西,我想通过按一个像“F9”这样的键来停止记录,所以我需要检测事件。这可能吗?有什么类似系统监听器的东西我可以使用吗? ~亨利
本文向大家介绍java获取鼠标在屏幕上坐标的方法,包括了java获取鼠标在屏幕上坐标的方法的使用技巧和注意事项,需要的朋友参考一下 介绍 java作为目前最为流行的计算机开发语言之一,学习java是高薪就业的好选择,本文介绍的这个小工具主要是使用MouseInfo类实时获取鼠标的信息,然后再JDialog上显示出来。希望下面的内容介绍,能够让大家对于如何获取鼠标在屏幕上的坐标更加了解,一起来学习下
问题内容: 我需要以某种方式捕获屏幕(作为打印屏幕),以便可以访问像素颜色数据,以进行一些图像识别,此后,我将需要在屏幕上生成鼠标事件,例如左键单击,拖放(移动鼠标)同时按下按钮,然后释放它)。完成后,图像将被删除。 注意:我需要捕获整个屏幕,用户可以看到所有内容,并且需要模拟程序窗口外的点击(如果有任何不同) 规格:Linux ubuntu语言:C ++ 性能不是很重要,“打印屏幕”功能将每隔1
问题内容: 是否可以在页面加载后使用JavaScript获取鼠标位置而没有任何鼠标移动事件(不移动鼠标)? 问题答案: 真正的答案:不,不可能。 好的,我刚刚想到了一种方法。用覆盖整个文档的div覆盖页面。在其中,创建(例如)2,000 x 2,000个元素(以便该伪类将在IE 6中运行),每个元素的大小为1像素。为那些更改属性的元素创建CSS 规则(比如说)。在您的负载处理程序中,循环浏览这40