2011-11-04 18 views
6

Próbuję narysować wielokąty i chciałbym móc kliknąć na ramkę, aby uzyskać współrzędne myszy, aby szybciej zamienił mentalny obraz na wartości x/y.Współrzędne myszy względem klatki

Używam

System.out.println("("+ MouseInfo.getPointerInfo().getLocation().x +", 
    "+ MouseInfo.getPointerInfo().getLocation().y +")"); 

ale to daje mi współrzędne w stosunku do mojego aktualnego ekranu, a nie moje okno Javy.

Jak mogę wyświetlić współrzędne w stosunku do okna Java?

Odpowiedz

4

Przypuszczam, że dodajesz MouseListener do ramki? Następnie można po prostu względnych współrzędnych z MouseEvent.getPoint

frame.addMouseListener(new MouseAdapter() { 
    void mouseClicked(MouseEvent e) { 
     System.out.println(e.getPoint()); 
    } 
}); 
+0

Działa, ale nie podaje poprawnych współrzędnych. Aby to przetestować, narysowałem kwadrat o wartości x = 50 i 7 = 50 (g.drawRect (50,50,100,100)); a kiedy kliknąłem w lewy górny róg kwadratu, oszczędzam x = 58 i y = 78 (java.awt.Point [x = 58; y = 78]) – Nyst

+0

Dzieje się tak, ponieważ otrzymujesz współrzędne myszy względem JFrame ale nie malujesz bezpośrednio na ramie. Prawdopodobnie malujesz na JPanelu dodanym do ramki JFrame. Oznacza to, że musisz dodać MouseListener do tego JPanel, aby uzyskać odpowiednie współrzędne. – SpiderPig

+0

moje złe, mam pomieszane ramkę i panel, naprawiono teraz – Nyst

13

można konwertować pomiędzy ekranem a składnik współrzędne przy użyciu klasy

Sposób convertPointFromScreen zajmie ekranu koordynuje i przekształcić go mieć w stosunku do SwingUtilties komponent, który podasz.

+0

bardzo dobra sugestia +1 – mKorbel

Powiązane problemy