web-dev-qa-db-fra.com

Comment obtenir l'emplacement d'un clic de souris par rapport à une fenêtre pivotante

Disons que je suis dans un Java Swing JFrame. Je clique sur ma souris. Je veux obtenir l'emplacement du clic de souris dans l'interface graphique. En Java, la ligne

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

Semble donner l'emplacement de la souris sur tout l'écran. Comment puis-je obtenir son emplacement par rapport à l'interface graphique?

15
pipsqueaker117

De MouseListener méthodes que vous pouvez faire:

@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
}

Ajoutez simplement ceci à votre Component en:

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

Référence:

18
David Kroukamp

Vous pouvez ajouter MouseListener au composant GUI dont le pixel supérieur gauche doit être traité comme un point [0,0] et obtenir x et y de 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);
8
Pshemo

Jeter un coup d'œil à Component.getMousePosition .

Renvoie la position du pointeur de la souris dans l'espace de coordonnées de ce Component si le Component est directement sous le pointeur de la souris, sinon renvoie null. Si le Component n'apparaît pas à l'écran, cette méthode retourne null même si le pointeur de la souris est au-dessus de la zone où le Component serait affiché. Si le Component est partiellement ou entièrement masqué par d'autres Component ou fenêtres natives, cette méthode renvoie une valeur nonnull uniquement si le pointeur de la souris est situé au-dessus de la partie non masquée de le Component.

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

... ou, si vous utilisez un MouseListener, vous pouvez voir mon commentaire d'origine ...

Essayez d'utiliser MouseEvent.getPoint .

Ce qui précède renverra le point de la souris par rapport au composant auquel l'écouteur était lié.

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

MouseEvent a des méthodes getX () et getY () qui retournent la position par rapport au composant source.

3
Mark