Question

Je Java MouseListener sur un composant pour détecter les presses de souris. Comment puis-je savoir qui suivre la presse a eu lieu dans la souris?

@Override
public void mousePressed(MouseEvent e) {
  // I want to make something happen on the monitor the user clicked in
}

L'effet que je suis en train de réaliser est: lorsque l'utilisateur appuie sur le bouton de la souris dans mon application, une fenêtre pop-up affiche quelques informations, jusqu'à ce que la souris est relâché. Je veux assurer cette fenêtre est positionné où l'utilisateur clique, mais je dois régler la position de la fenêtre sur l'écran actuel de sorte que la totalité de la fenêtre est visible.

Était-ce utile?

La solution

Vous pouvez obtenir des informations d'affichage de java .awt.GraphicsEnvironment . Vous pouvez l'utiliser pour obtenir une information sur votre système local. Y compris les limites de chaque moniteur.

Point point = event.getPoint();

GraphicsEnvironment e 
     = GraphicsEnvironment.getLocalGraphicsEnvironment();

GraphicsDevice[] devices = e.getScreenDevices();

Rectangle displayBounds = null;

//now get the configurations for each device
for (GraphicsDevice device: devices) { 

    GraphicsConfiguration[] configurations =
        device.getConfigurations();
    for (GraphicsConfiguration config: configurations) {
        Rectangle gcBounds = config.getBounds();

        if(gcBounds.contains(point)) {
            displayBounds = gcBounds;
        }
    }
}

if(displayBounds == null) {
    //not found, get the bounds for the default display
    GraphicsDevice device = e.getDefaultScreenDevice();

    displayBounds =device.getDefaultConfiguration().getBounds();
}
//do something with the bounds
...

Autres conseils

La réponse de Rich m'a aidé à trouver une solution complète:

public void mousePressed(MouseEvent e) {
    final Point p = e.getPoint();
    SwingUtilities.convertPointToScreen(p, e.getComponent());
    Rectangle bounds = getBoundsForPoint(p);
    // now bounds contains the bounds for the monitor in which mouse pressed occurred
    // ... do more stuff here
}


private static Rectangle getBoundsForPoint(Point point) {
    for (GraphicsDevice device : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) {
        for (GraphicsConfiguration config : device.getConfigurations()) {
            final Rectangle gcBounds = config.getBounds();
            if (gcBounds.contains(point)) {
                return gcBounds;
            }
        }
    }
    // if point is outside all monitors, default to default monitor
    return GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
}

Depuis Java 1.6, vous pouvez utiliser getLocationOnScreen, dans les versions précédentes, vous devez obtenir l'emplacement du composant qui a généré l'événement:

Point loc;
// in Java 1.6
loc = e.getLocationOnScreen();
// in Java 1.5 or previous
loc = e.getComponent().getLocationOnScreen();

Vous devrez utiliser la classe GraphicsEnvironment pour obtenir la limite de l'écran.

Peut-être e.getLocationOnScreen (); marchera? Il est seulement pour Java 1.6.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top