Answers:
MouseInfo.getPointerInfo()。getLocation()可能会有所帮助。它返回与当前鼠标位置相对应的Point对象。
Container.getMousePosition()
有时会返回null
,因此可以避免该问题。
SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
MouseInfo.getPointerInfo()
没有鼠标或在某些multimon设置中,Note 可以返回null。
SwingUtilities.convertPointFromScreen(..)
就地转换第一个参数,并且不返回任何内容,因此与@AndreiVajnaII注释相比,它的编写方式有所不同,这样我们就可以控制该Point
对象。
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
int x = (int) b.getX();
int y = (int) b.getY();
System.out.print(y + "jjjjjjjjj");
System.out.print(x);
Robot r = new Robot();
r.mouseMove(x, y - 50);
在SWT中,您不必处于侦听器中即可到达鼠标位置。Display对象具有方法getCursorLocation()
。
在香草SWT / JFace中,致电Display.getCurrent().getCursorLocation()
。
在RCP应用程序中,调用PlatformUI.getWorkbench().getDisplay().getCursorLocation()
。
对于SWT应用中,优选使用getCursorLocation()
过MouseInfo.getPointerInfo()
,其他人已经提到的那样,因为后者在AWT工具包,SWT被设计用来替换实现。
import java.awt.MouseInfo;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class MyClass {
public static void main(String[] args) throws InterruptedException{
while(true){
//Thread.sleep(100);
System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x +
", " +
MouseInfo.getPointerInfo().getLocation().y + ")");
}
}
}
import java.awt.MouseInfo;
import java.util.concurrent.TimeUnit;
public class Cords {
public static void main(String[] args) throws InterruptedException {
//get cords of mouse code, outputs to console every 1/2 second
//make sure to import and include the "throws in the main method"
while(true == true)
{
TimeUnit.SECONDS.sleep(1/2);
double mouseX = MouseInfo.getPointerInfo().getLocation().getX();
double mouseY = MouseInfo.getPointerInfo().getLocation().getY();
System.out.println("X:" + mouseX);
System.out.println("Y:" + mouseY);
//make sure to import
}
}
}
如果您将Swing用作UI层,则可以为此使用Mouse-Motion Listener。
我正在做类似的事情来使用机器人获取鼠标坐标,我在开发的一些游戏中还使用了这些坐标:
public class ForMouseOnly {
public static void main(String[] args) throws InterruptedException {
int x = MouseInfo.getPointerInfo().getLocation().x;
int y = MouseInfo.getPointerInfo().getLocation().y;
while (true) {
if (x != MouseInfo.getPointerInfo().getLocation().x || y != MouseInfo.getPointerInfo().getLocation().y) {
System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x + ", "
+ MouseInfo.getPointerInfo().getLocation().y + ")");
x = MouseInfo.getPointerInfo().getLocation().x;
y = MouseInfo.getPointerInfo().getLocation().y;
}
}
}
}
如果您使用的是SWT,则可能需要按照此处的说明添加一个MouseMoveListener 。
在我的场景中,我应该基于使用鼠标完成的GUI操作在鼠标位置打开一个对话框。以下代码为我工作:
public Object open() {
//create the contents of the dialog
createContents();
//setting the shell location based on the curent position
//of the mouse
PointerInfo a = MouseInfo.getPointerInfo();
Point pt = a.getLocation();
shellEO.setLocation (pt.x, pt.y);
//once the contents are created and location is set-
//open the dialog
shellEO.open();
shellEO.layout();
Display display = getParent().getDisplay();
while (!shellEO.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return result;
}
getPointerInfo().getLocation()
返回相对于屏幕的位置。如果您想要相对于组件的位置(如MouseListeners给定的),则可以从中减去yourComponent.getLocationOnScreen()
。