Breite eines erweiterten Monitors feststellen

Diskutiere Breite eines erweiterten Monitors feststellen im Allgemeine Java-Themen Bereich.
kodela

kodela

Hallo,

unter Win 10 verwende ich zwei Monitore im erweiterten Modus. Der sekundäre Monitor steht links vom primären.

Mit der Beendigung einer Anwendung werden die Koordinaten (links oben) der letzten Position in einer Konfigurationsdatei gespeichert, so dass beim nächsten Start das Fenster so angezeigt werden kann, wie es geschlossen wurde.

Es kann nun sein, dass beim nächsten Öffnen der Anwendung der sekundäre Monitor nicht mehr zur Verfügung steht. Wurde das Anwendungsfenster beim Schließen der Anwendung in einem solchen Fall im Bereich des sekundären Monitors angezeigt, wird es nun zwar geöffnet, aber nicht mehr angezeigt.

Für solche Fälle, auch wenn der sekundäre Monitor rechts des primären stehen sollte, möchte ich erreichen, dass das Fenster im primären Monitor angezeigt wird.

Ich dachte, dies müsste über eine Auswertung der sich veränderten Monitorbreite bewerkstelligen lassen. Jetzt musste ich aber feststellen, dass für die Breite, unabhängig davon, ob eine Erweiterung für den Monitor besteht oder nicht, über die Abfrage
int sx = Toolkit.getDefaultToolkit().getScreenSize().width;
immer nur die Breite des primären Monitors zu bekommen ist.

Gibt es eine Möglichkeit, die Koordinaten für die linke und rechte Begrenzung des jeweils aktuellen Anzeigebereichs abzufragen?
 
kodela

kodela

Ja, damit hatte ich es auch schon versucht, allerdings musste ich erst einmal alle abstrakten Methoden der GraphicsEnvironment Klasse implementieren und auch dann stand ich ziemlich hilflos vor einem Berg. Ein praktischen Beispiel dazu fand ich nicht.
 
mihe7

mihe7

Du solltest da gar nichts implementieren müssen:
Java:
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] devs = env.getScreenDevices();
for (GraphicsDevice dev : devs) {
    String id = dev.getIDstring();
    int width = dev.getDisplayMode().getWidth();
    int height = dev.getDisplayMode().getHeight();
    System.out.printf("%s: %d x %d\n", id, width, height);
}
 
kodela

kodela

Danke mihe7!

Über defs.length kann die Anzahl der Monitore abgefragt werden und da das Koordinatensystem für eine Monitorerweiterung die gesamte Fläche einbezieht, kann man am Wert der gespeicherten x-Position erkennen, ob und und wie korrigiert werden muss, falls nur ein Monitor vorhanden ist.

Nochmals danke!
 
kodela

kodela

Hier der Code für die "Rückholung" eines Fensters nach einer Umstellung von einer erweiterten Anzeige auf nur einen Monitor.
In x und y sind die Werte von der letzten Fensterposition im erweiterten Anzeigemodus.
Java:
    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] devs = env.getScreenDevices();
    if (devs.length < 2) {                                      // nur ein Monitor
        int width1 = devs[0].getDisplayMode().getWidth();       // Breite prim. Monitor
        if (x < 0) {                                            // zuletzt links
            x += width1;                                        // nach recht schieben
        } else if (x > width1) {                                // zuletzt rechts
            x -= width1;                                        // nach links schieben
        }
    }
    setLocation(x, y);
Eine eventuelle Höhenverschiebung wurde nicht berücksichtigt.
 
Thema: 

Breite eines erweiterten Monitors feststellen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben