Отслеживать изменение Point мыши за пределами Фрейма - Java
Формулировка задачи:
У меня проблема: пытаюсь реализовать перемещение недекорированного фрема по рабочему столу.
такой код выдает "Проблема с переменными позиционирования..." при отпускании мыши за фреймом:
Так как там Point от Фрейма становится null. Как отследить длину ведения мыши в какую-то сторону, не зависимо от того, находится ли она над фреймом. Это что, слушатель на рабочий стол вешать? Или как-то можно именно на мышь?
Можно прописать маусЛистенер и как-то связать? Есть короткие примеры?
Double mish1;
Double mish2;
.....
@Override
public void mousePressed(MouseEvent l)
{
mish1 = getMousePosition();
}
@Override
public void mouseReleased(MouseEvent l)
{
mish2 = getMousePosition();
try
{
int mishResultX = (int)(mish2.getX() - mish1.getX());
int mishResultY = (int)(mish2.getY() - mish1.getY());
Launcher.this.setLocation(Launcher.this.getLocation().x + mishResultX, Launcher.this.getLocation().y + mishResultY);
}
catch (Exception ex)
{
System.err.println("Проблема с переменными позиционирования...");
}
}
});Решение задачи: «Отслеживать изменение Point мыши за пределами Фрейма»
textual
Листинг программы
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
public class JavaApplication4 extends JFrame {
private int xOnPressed;
private int yOnPressed;
public JavaApplication4() {
setUndecorated(true);
setSize(100, 100);
addMouseMotionListener(new MouseMotionAdapter() {
@Override public void mouseDragged(MouseEvent e) {
setLocation(getX() + e.getXOnScreen() - xOnPressed, getY() + e.getYOnScreen() - yOnPressed);
xOnPressed = e.getXOnScreen();
yOnPressed = e.getYOnScreen();
}
});
addMouseListener(new MouseAdapter() {
@Override public void mousePressed(MouseEvent e) {
xOnPressed = e.getXOnScreen();
yOnPressed = e.getYOnScreen();
}
});
}
public static void main(String[] args) {
new JavaApplication4().setVisible(true);
}
}