Breite und Höhe aller Monitore ausgeben.

JavaRentner

Aktives Mitglied
Guten Tag Alle

Ich habe sechs baugleiche Monitore (1920 x 1080, 27")
Angeordnet in zwei Reihen à 3 Stück.

Wenn ich das manuell ausrechne komme ich auf eine Dimension von: 5760 x 2160

Meine Frage ist, wie kann ich mit java auf dieses Ergebnis kommen?
Java:
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] devices = env.getScreenDevices();

devices.length;    //ergibt 6 Monitore
/*
6 * 1920 wäre also FALSCH
6 * 1080 ist ebenso FALSCH
*/

int w = env.getMaximumWindowBounds().width;
int h = env.getMaximumWindowBounds().height;

/*
Wenn die (Task) Leiste ganz links auf ERSTEM Monitor und ebenfalls auf viertem
Monitor Vertikal gesetzt ist, ist w um die Breite der Leiste zu KLEIN!

Wenn die Liste am unteren Rand auf allen drei Monitoren liegt ist h um die höhe der
Leiste zu klein.
*/
Einfach devices.length durch 2 zu teilen bringt es auf dem zweiten Compi nicht, weil der 5 Monitore hat!
Drei in der untersten Reihe und zwei in der 2. Reihe (EINGEMITTET)
Diese Anordnung wird für ein anderes Programm, zwecks Ausgabe, so erwartet!

Ab hier komme ich mit meinen bescheidenen Kenntnissen nicht mehr weiter...

Wenn es dazu im JDK nichts vorgefertigtes gibt, wie würde dann ein Workaround aussehen?
Mit welchen Infos aus GraphicsEnvironment könnte ich da arbeiten?

Vielen Dank
Ohne Hilfe komme ich da nicht weiter.

PS:
Es gibt noch eine dritte Station die vier Monitore auf einer Reihe hat!
Wenn ich da durch 2 teile, habe ich oben zwei schwarze Felder und unten fehlen mir zwei Monitore.
 
Zuletzt bearbeitet:
Beste Antwort
Folgendes sollte dir die Gesamtgröße aller Monitore ausgeben:


Java:
public class MonitorTest {
    public static void main(String[] args) {
        var env = GraphicsEnvironment.getLocalGraphicsEnvironment();
        var screens = env.getScreenDevices();

        var width = 0;
        var height = 0;

        for (GraphicsDevice screen : screens) {
         
            //Der linkeste Monitor hat x = 0, der oberste y = 0. 
            //Ansonsten sind die Werte relativ zu einander
            var bounds = screen.getDefaultConfiguration().getBounds();

            var currentWidth = bounds.x + bounds.width;

            if (currentWidth > width) {
                width = currentWidth;
            }

            var currentHeight =...
Folgendes sollte dir die Gesamtgröße aller Monitore ausgeben:


Java:
public class MonitorTest {
    public static void main(String[] args) {
        var env = GraphicsEnvironment.getLocalGraphicsEnvironment();
        var screens = env.getScreenDevices();

        var width = 0;
        var height = 0;

        for (GraphicsDevice screen : screens) {
         
            //Der linkeste Monitor hat x = 0, der oberste y = 0. 
            //Ansonsten sind die Werte relativ zu einander
            var bounds = screen.getDefaultConfiguration().getBounds();

            var currentWidth = bounds.x + bounds.width;

            if (currentWidth > width) {
                width = currentWidth;
            }

            var currentHeight = bounds.y + bounds.height;
            if (currentHeight > height) {
                height = currentWidth;
            }
        }

        System.out.println("%s * %s".formatted(width, height));
    }
}

Mit der Taskleiste weiß ich spontan auch nichts besseres, als die dann einfach von der Höhe abzuziehen.
 
Beste Antwort
@Ebi
Das war genau DAS was ich gesucht habe! 😁😁😁

Java:
height = currentWidth;
Ich glaube das sollte: height = currentHeight; heissen?

Da der primäre Monitor der mittlere in der unteren Reihe ist, muss ich das iwie mit dem x noch anpassen.
Aber das krieg ich hin!

Darf ich Deinen Code so verwenden? Wäre super.
Vielen Dank!
 
Zuletzt bearbeitet:
Hi @Oneixee5

5760 x 2160 habe ich auf einem Monitor - muss ich nicht so viel rechnen - bloß gut
Was machst Du wenn Du zu deinem Monitor noch einen zweiten (gleicher Bauweise) daneben stellst?
Oder sogar noch zwei Monitore (gleicher Bauweise) darüber stellst?

Dann fängt doch auch bei Dir die rechnerei an! Oder nicht?
Gruss JavaRentner

Das von Ebi war schon die Lösung!
Funktioniert sogar mit Monitoren ungleicher Grösse!
Gerade getestet mit einem Notebook 17" (1600*900) mit angeschlossenem 27" Monitor (1920x1080)
 
Zuletzt bearbeitet:
Was machst Du wenn Du zu deinem Monitor noch einen zweiten (gleicher Bauweise) daneben stellst?
Oder sogar noch zwei Monitore (gleicher Bauweise) darüber stellst?
Ich will streiten aber sowas will man nicht mehr, das ist so 2010 - hässlich, sperrig ... Es ist auch nicht ergonomisch und gesund. In den Büros werden diese Setups schon seit einer Weile ersetzt. Mit Abschluss der Win11-Umstellung soll das bei uns alles weg sein. Wenn man etwas noch größeres als einen Dell UltraSharp braucht, dann kann man das Bild immer noch auf die Wand legen. Bei den Auflösungen kommen aber die USBC-Docks an ihre Grenzen.
Du machst das aber schon richtig, wenn man eine Desktop-Software schreibt, dann sollte man auch Multi-Monitor-Setups berücksichtigen.
 

Zurück
Oben