Come ottenere la posizione di un clic del mouse rispetto a una finestra mobile

Supponiamo che io sia in un Java Swing JFrame. Clicco il mio mouse Voglio ottenere la posizione del clic del mouse all’interno della GUI . In java, la linea

int mouseX = MouseInfo.getPointerInfo().getLocation.x; 

Sembra dare la posizione del mouse sull’intero schermo. Come potrei ottenere la sua posizione relativa alla GUI?

Dai metodi MouseListener puoi fare:

 @Override public void mouseClicked(MouseEvent e) { int x=e.getX(); int y=e.getY(); System.out.println(x+","+y);//these co-ords are relative to the component } 

Aggiungi semplicemente questo al tuo Component :

 component.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { } }); 

Riferimento:

  • Come scrivere un listener di mouse

Dai un’occhiata a Component.getMousePosition .

Restituisce la posizione del puntatore del mouse nello spazio di coordinate di questo Component se il Component trova direttamente sotto il puntatore del mouse, altrimenti restituisce null . Se il Component non viene visualizzato sullo schermo, questo metodo restituisce null anche se il puntatore del mouse si trova sopra l’area in cui verrà visualizzato il Component . Se il Component è parzialmente o completamente oscurato da altre windows del Component o nativo, questo metodo restituisce un valore non null solo se il puntatore del mouse si trova sopra la parte non oscurata del Component .

 final Point mousePos = component.getMousePosition(); if (mousePos != null) { final int mouseX = mousePos.x; final int mouseY = mousePos.y; ... } 

… o, se usi un MouseListener , potresti vedere il mio commento originale …

Prova a utilizzare MouseEvent.getPoint .

Quanto sopra restituirà il punto del mouse relativo al componente a cui è stato associato il listener.

 public void mouseClicked(final MouseEvent evt) { final Point pos = evt.getPoint(); final int x = pos.x; final int y = pos.y; } 

È ansible aggiungere MouseListener al componente della GUI il cui pixel in alto a sinistra deve essere minacciato come [0,0], e ottenere xey da MouseEvent

 JFrame frame = new JFrame(); JPanel panel = new JPanel(); frame.add(panel); panel.addMouseListener(new MouseAdapter() {// provides empty implementation of all // MouseListener`s methods, allowing us to // override only those which interests us @Override //I override only one method for presentation public void mousePressed(MouseEvent e) { System.out.println(e.getX() + "," + e.getY()); } }); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200, 200); frame.setVisible(true); 

MouseEvent ha metodi getX () e getY () che restituiscono la posizione relativa al componente sorgente.