답변:
MouseInfo.getPointerInfo (). getLocation () 이 도움이 될 수 있습니다. 현재 마우스 위치에 해당 하는 Point 객체를 반환합니다 .
Container.getMousePosition()
이 몇 번 반환 null
될 수 있습니다 .이를 사용하면 문제를 피할 수 있습니다.
SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
MouseInfo.getPointerInfo()
는 마우스가 없거나 일부 멀티 몬 설정에서 null을 반환 할 수 있습니다.
SwingUtilities.convertPointFromScreen(..)
는 우리가 잡아 얻을 수 있도록하는 것이 @AndreiVajnaII 의견에 다른 상대 비트를 작성해야하므로 변환은 현재 위치에서 첫 번째 인수하고, 아무것도 반환하지 않는 Point
개체를.
SWT에서는 마우스 위치에 도달하기 위해 리스너에있을 필요가 없습니다. Display 객체에는 메소드가 getCursorLocation()
있습니다.
바닐라 SWT / JFace에서 Display.getCurrent().getCursorLocation()
.
RCP 애플리케이션에서 PlatformUI.getWorkbench().getDisplay().getCursorLocation()
.
SWT 애플리케이션의 경우, SWT가 대체하도록 설계된 AWT 툴킷에 후자가 구현되므로 다른 사람들이 언급 한 것 getCursorLocation()
보다 사용하는 것이 좋습니다 MouseInfo.getPointerInfo()
.
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
}
}
}
java.awt.Robot 클래스를 살펴보십시오. 프로그래밍 방식으로 마우스를 이동할 수 있습니다.
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;
}
}
}
}
내 시나리오에서는 마우스로 수행 한 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()
에서 빼면 됩니다.