10
votes

Comment déterminer quel moniteur un événement Swing Souris se produit-il?

J'ai une mousse de souris Java sur un composant pour détecter les presses de la souris. Comment puis-je dire quel moniteur la presse de la souris s'est produite dans?

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


2 commentaires

Je ne suis pas sûr que ce soit aussi facile. Je pense que vous devez capter la souris pour voir des clics à l'extérieur de votre fenêtre, et je ne sais pas comment faire cela dans Java (d'où le commentaire - je n'ai aucune "réponse").


Bill, vous avez raison, ce n'est pas facile. C'est pourquoi je demande le cerveau collectif qui est une pile débordement!


4 Réponses :


13
votes

Vous pouvez obtenir des informations d'affichage de Java .awt.graphicsenvironment . Vous pouvez utiliser cela pour obtenir des informations 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
...


1 commentaires

C'est la moitié de la solution et cela m'a aidé à travailler toute la solution. Merci!



0
votes

peut-être e.getlocationVoyonscreen (); marchera? C'est seulement pour Java 1.6.


0 commentaires

1
votes

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

Vous devrez utiliser la classe graphiqueenvironment pour obtenir la liaison de l'écran.


0 commentaires

2
votes

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


1 commentaires

Si vous souhaitez obtenir le moniteur par défaut, voir ma réponse mise à jour, sur les systèmes multi-écrans où Windows doit être centré sur tous les affichages, GetMaximumWindowbounds () renvoie les limites de la zone d'affichage totale .