Отслеживать изменение Point мыши за пределами Фрейма - Java

Узнай цену своей работы

Формулировка задачи:

У меня проблема: пытаюсь реализовать перемещение недекорированного фрема по рабочему столу. такой код выдает "Проблема с переменными позиционирования..." при отпускании мыши за фреймом:
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 от Фрейма становится null. Как отследить длину ведения мыши в какую-то сторону, не зависимо от того, находится ли она над фреймом. Это что, слушатель на рабочий стол вешать? Или как-то можно именно на мышь? Можно прописать маусЛистенер и как-то связать? Есть короткие примеры?

Решение задачи: «Отслеживать изменение 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);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5