Swing GUI an Auflösung und Bildschirmgröße anpassen

MayR42

Mitglied
Hallo zusammen und ein gesundes neues Jahr!

Ich arbeite gerade an einer GUI, die auf verschiedenen Systemen mit unterschiedlichen Auflösungen und Bildschirmgrößen laufen soll. Die GUI soll in Swing umgesetzt werden. Zudem würde ich den GridBayLayout verwenden, um mir die Elemente wunderbar anzuordnen. Jetzt aber zum Problem....

Beispiel:
GUI wird für/auf einem Full-HD 24 Zoll Bildschirm entworfen und sieht da wunderbar aus. Startet man die GUI auf einem 4k 15 Zoll Bildschirm sind die einzelnen Elemente mit Beschriftung winzig.
Zudem kann man bei einigen OS's einen Skalierungsfaktor einstellen, der das ganze auch noch beeinflussen kann.

Jetzt habe ich überlegt, die Anzeigedaten zu ermitteln und daraufhin meine GUI zu skalieren (Schriftgrößen usw.). Die Anordnung der Elemente übernimmt ja zu Glück der Layoutmanager.

Mit Toolkit kann man ja über getScreenSize und getScreenResolution einige Anzeigedaten ermitteln. Ich habe mir mal die Werte für mein Bildschrim 15,6'' 3840x2160 Win10 ausgeben lassen:

Java:
groesseY = Toolkit.getDefaultToolkit().getScreenSize().height;
groesseX = Toolkit.getDefaultToolkit().getScreenSize().width;
aufloesung = Toolkit.getDefaultToolkit().getScreenResolution();

Bei 200% Skalierung bekomme ich:
aufloesung = 192
groesseY = 2160
groesseX = 3840

Bei 100% Skalierung bekomme ich:
aufloesung = 192
groesseY = 4320
groesseX = 7680

Warum wird mir eine falsche Auflösung ausgegeben? Müssten doch 282 sein. Und wieso verändert die Skalierung die Punkteanzahl?

Hat jemand Erfahrung mit so einem Problem? Was haltet ihr von meinem Lösungsansatz?

Viele Frage...:confused:
Danke schonmal im voraus
 

truesoul

Top Contributor
Hallo.

Vielleicht auch Interessant hier nachzulesen.

Da hat sich einiges geändert seit Java 9.

Wenn 192 DPI eingestellt ist, sollte auch 192 ausgegeben werden.
Siehe in den Anzeigeeinstellungen von Windows z. B.

Grüße
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Es ist doch logisch, dass wenn du doppelt so groß skalierst, du nur noch die Hälfte der Pixel zur verfügung hast. Du brauchst ja nun 4 Pixel um vorher ein Pixel darzustellen. Die DPI ändern sich durch die Skalierung nicht. Das wäre auf fatal.

Was ich nicht verstehe ist, warum du dem User eine Schriftgrösse aufzwingen willst, bzw. eine Fenstergrösse. Wir sind doch hier nicht auf dem Smartphone. Die Frames sollten resizeable sein und die fontgrösse so, dass sie bei der kleinsten akzeptableren Größe (die du mit Festlegst, also z.b. 1024x768 oder wenn es sein muss 1280x1024) gut zu lesen sind. Die Schriftgrösse hat ja nichts mit der Bildschirmgröße zu tun. Bei größerem Fenster kann ich halt nur mehr Infos gleichzeitig sehen. Gibt es bei deiner gui keinen solchen Teil, wie z.b. Ein tableview, eine listigen, eine textarea oder ein Textfield, dann solltest du tatsächlich die Größe des Fenster fest an die benötigten Elemente anpassen und nicht resizable mache. Denn es bringt ja nichts ein größeres Fenster anzuzeigen nur damit die fonts größer werden. Der Informationsgehalt ändert sich dadurch ja nicht und es wird nur bildschirmplatz verschwendet.

Ich würde übrigens bei enormalesn Ui Elementen immer mit der systemFont size arbeiten, so dass sich dein Ui in die Einstellungen des Users integriert.

Gruß

Claus
 

MayR42

Mitglied
@truesoul: Danke für den Link, sehr interessant. Ich bin wohl nicht der Einzige ;)

Es ist doch logisch, dass wenn du doppelt so groß skalierst, du nur noch die Hälfte der Pixel zur verfügung hast. Du brauchst ja nun 4 Pixel um vorher ein Pixel darzustellen. Die DPI ändern sich durch die Skalierung nicht. Das wäre auf fatal.

@Thallius: Verstehe ich nicht... Mein Bildschirm kann doch nur maximal 3840x2160. Wieso ermittelt das Toolkit bei 100% Skalierung groesseY = 4320 groesseX = 7680 und nicht 3840x2160. Und bei 200% Skalierung würde ich 1920x1080 erwarten.

Die Schriftgrösse hat ja nichts mit der Bildschirmgröße zu tun.
@Thallius: Das ist richtig. Aber die Auflösung macht das ganze für mich schwierig. Vierfache Auflösung bei gleichbleibender Bildschirmgröße bedeutet, dass die GUI-Größe durch vier geteilt wird und dadurch sehr klein ist.
 

Thallius

Top Contributor
Wer benutzt denn einen 4K 15“ Monitor für seinen PC? Und selbst wenn, dann ist dafür ja die Skalierung gedacht. Ich habe keine Ahnung wie das unter Windows läuft aber bei Apple wird bei den Retina Displays grundsätzlich nur die Viertel Auflösung für die UI benutzt und wenn du die volle Auflösung in deinem Programm benutzen willst, z.b. Um Bilder oder Videos anzuzeigen, dann Must du das explizit einschalten.

Gruß

Claus
 

MayR42

Mitglied
@Thallius: 4K bei 15'' kann ich nur empfehlen. Wenn man einmal damit gearbeitet hat, will man es nicht mehr missen ;)

Durch meinen Bildschirm bin ich ja erst richtig auf dieses Problem gekommen.
 

Thallius

Top Contributor
Aber wie du gerade feststellst bringt es dir beim normalen arbeiten überhaupt nichts weil du die Schriften so gross skalieren Must das du sie wieder lesen kannst, dass du überhaupt keinen Vorteil aus der großen Auflösung ziehen kannst...
 

mrBrown

Super-Moderator
Mitarbeiter
aber bei Apple wird bei den Retina Displays grundsätzlich nur die Viertel Auflösung für die UI benutzt
Nein, die Auflösung ist vom User wählbar.

Aber wie du gerade feststellst bringt es dir beim normalen arbeiten überhaupt nichts weil du die Schriften so gross skalieren Must das du sie wieder lesen kannst, dass du überhaupt keinen Vorteil aus der großen Auflösung ziehen kannst...
Ist btw nur ~20% kleiner als an dem von dir genannten Retina-Display...
 

MayR42

Mitglied
Nochmals zurück zu meinem Problem...

Hat jemand Erfahrung mit dem Ermitteln der Bildschirmauflösung (mit Skalierungsfaktor) und der Bildschirmgröße?
Bei mir funktioniert es unter Windows ja nicht ganz nachvollziehbar (siehe oben).
 

mrBrown

Super-Moderator
Mitarbeiter
Ich würde das "Problem" in dem Fall einfach ignorieren.
Mich als User würde es stören, wenn ich meinen Bildschirm runter skaliere, aber genau ein Programm sich dann gleichzeitig hochskaliert - entgegen meinen Einstellungen.
 

MayR42

Mitglied
Ich würde das "Problem" in dem Fall einfach ignorieren.
Mich als User würde es stören, wenn ich meinen Bildschirm runter skaliere, aber genau ein Programm sich dann gleichzeitig hochskaliert - entgegen meinen Einstellungen.

@mrBrown:
Ich kann das Problem nicht ignorieren, da ohne Anpassung die Texte in der Anwendung auf einem 4K-Bildschirm kaum lesbar sind. Dem Anwender müsste ich dann zur GUI eine Lupe mitliefern o_O
 

mrBrown

Super-Moderator
Mitarbeiter
Und alle Texte außerhalb der Anwendung sehen normal aus?

Dann hilft ein Update auf Java 9 oder Nutzung von Swing-Nachfolger JavaFX.
Händisch anpassen wird vermutlich nicht funktionieren - eben weil das Problem auch in AWT/Swing selbst steckt und diese nicht grad gut daran anzupassen sind.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I TIFF im CMYK-Farbmodell + mit dpi-Auflösung im Header erzeugen - wie? AWT, Swing, JavaFX & SWT 0
L JavaFX Pane inklusive Inhalt der Bildschirm Auflösung anpassen AWT, Swing, JavaFX & SWT 13
M UI immer lesbar, egal welche Auflösung AWT, Swing, JavaFX & SWT 7
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
I LookAndFeel HTML Auflösung - Online Editor programmieren AWT, Swing, JavaFX & SWT 2
C Auflösung des Bildschirms ändern AWT, Swing, JavaFX & SWT 2
G Inhalt von JPanel andere Auflösung AWT, Swing, JavaFX & SWT 4
T JPEG Auflösung AWT, Swing, JavaFX & SWT 15
G auflösung AWT, Swing, JavaFX & SWT 2
berserkerdq2 Kann ich ein Rechteck mittig im Fenster halten, egal wie ich die Bildschirmgröße verändere? AWT, Swing, JavaFX & SWT 3
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
N JFrame mit Elementen an die Bildschirmgröße automatisch anpassen AWT, Swing, JavaFX & SWT 3
X JFrames auf Bildschirmgröße maximieren. Ohne diese Symbolleiste AWT, Swing, JavaFX & SWT 4
Z Java Applet Fenster automatisch an Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 4
C JFrame an Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 3
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
L JavaFx Textformatierung mittels Datenbank und Funktion anpassen AWT, Swing, JavaFX & SWT 5
Yonnig JavaFX Größe von WebView an Content anpassen AWT, Swing, JavaFX & SWT 3
W JavaFX Farben dynamisch anpassen AWT, Swing, JavaFX & SWT 4
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
R Größe von Scene und stage an grid anpassen AWT, Swing, JavaFX & SWT 4
M Java FX größe der shapes anpassen AWT, Swing, JavaFX & SWT 0
R Swing JCTable auf Java9 anpassen AWT, Swing, JavaFX & SWT 10
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
K Swing labels anpassen AWT, Swing, JavaFX & SWT 1
J Gridpane Breite in Scrollpane automatisch anpassen AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
L JavaFX ListView Größe anpassen AWT, Swing, JavaFX & SWT 1
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
I CSS - backgroundImage - Größe automatisch an den Container anpassen AWT, Swing, JavaFX & SWT 1
P TreeView automatisch an große von Inhalt anpassen AWT, Swing, JavaFX & SWT 3
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
Y Listview Textfield vergrößern, Schrift anpassen AWT, Swing, JavaFX & SWT 0
I JFrame an Bildschirm anpassen AWT, Swing, JavaFX & SWT 1
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
G JavaFX Width von Nodes einer HBox an Tab width anpassen AWT, Swing, JavaFX & SWT 3
M Swing JColorchooser anpassen - custom style? AWT, Swing, JavaFX & SWT 0
F Swing Anpassen des Layouts AWT, Swing, JavaFX & SWT 3
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
B Swing JTable mit Daten - Reihen-Größe anpassen AWT, Swing, JavaFX & SWT 0
M Swing TableCellRenderer elegant anpassen AWT, Swing, JavaFX & SWT 3
D JFileChooser anpassen AWT, Swing, JavaFX & SWT 5
S JMenuBar wiederverwenden und Eventhandling anpassen AWT, Swing, JavaFX & SWT 4
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
M Swing JTabbedPane: Tab-Elemente anpassen AWT, Swing, JavaFX & SWT 3
I JTable Spalten automatisch dem Inhalt anpassen! AWT, Swing, JavaFX & SWT 6
D Swing Spielfeldgroesse anpassen AWT, Swing, JavaFX & SWT 5
N Swing microba - DatePicker: Feld-Hintergrund anpassen AWT, Swing, JavaFX & SWT 2
S Swing Feldgrösse anpassen ? AWT, Swing, JavaFX & SWT 3
K JSpinner in passender Breite erstellen oder automatisch anpassen AWT, Swing, JavaFX & SWT 2
B JTextArea Größe an Container anpassen AWT, Swing, JavaFX & SWT 2
A DefaultCellRendere - Zellehintergrundsfarbe anpassen AWT, Swing, JavaFX & SWT 4
windl GUI an Bildschirmauflösung anpassen AWT, Swing, JavaFX & SWT 7
A Swing Anpassen der Spaltenbreite durch die länge eines Strings AWT, Swing, JavaFX & SWT 3
D JTable width automatisch anpassen AWT, Swing, JavaFX & SWT 4
N Swing KomponentenHöhe an html-Inhalt anpassen AWT, Swing, JavaFX & SWT 4
windl Querstreifen beim Bilder malen und anpassen an neue CPU AWT, Swing, JavaFX & SWT 12
C Scollpane an dynamisches GridLayout anpassen? AWT, Swing, JavaFX & SWT 3
G Swing JComboBox anpassen AWT, Swing, JavaFX & SWT 6
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
M Fenstergrösse an Bild anpassen AWT, Swing, JavaFX & SWT 13
T Die Größe einer JTextArea an Ihren Parent JPanel anpassen. AWT, Swing, JavaFX & SWT 5
T Spaltennamen jeweils der angezeigten Tabelle anpassen AWT, Swing, JavaFX & SWT 19
1 Swing Spaltenbreite and CellEditor- Komponente anpassen AWT, Swing, JavaFX & SWT 4
R JTable: Spaltenbreite automatisch anpassen AWT, Swing, JavaFX & SWT 3
B JSpinner Textgröße anpassen AWT, Swing, JavaFX & SWT 2
P Swing JScrollPane-Inhalt: Grösse anpassen AWT, Swing, JavaFX & SWT 6
B FileChooser anpassen AWT, Swing, JavaFX & SWT 2
0 JPanel nicht an größe des JFrames anpassen AWT, Swing, JavaFX & SWT 3
B Tabelle anpassen AWT, Swing, JavaFX & SWT 6
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
B JScrollpane - Größe anpassen AWT, Swing, JavaFX & SWT 4
X JEditorPane Größe in JDialog automatisch anpassen AWT, Swing, JavaFX & SWT 2
M JPanel an JFrame anpassen AWT, Swing, JavaFX & SWT 7
J Button Layout anpassen AWT, Swing, JavaFX & SWT 22
X jTable anpassen AWT, Swing, JavaFX & SWT 2
S Swing Panelgröße anpassen wenn Frame maximiert wird AWT, Swing, JavaFX & SWT 2
I Swing Optik eines JButton an JToolBar anpassen AWT, Swing, JavaFX & SWT 5
T Swing jTextArea soll sich der Fenstergröße anpassen beim ziehen?? AWT, Swing, JavaFX & SWT 2
Mike90 JTabbedPane Größe anpassen AWT, Swing, JavaFX & SWT 17
T LayoutManager GridBagLayout an Fenstergröße anpassen AWT, Swing, JavaFX & SWT 2
N JTable Zellenhöhe an Zeilenanzahl anpassen AWT, Swing, JavaFX & SWT 3
W Zellengröße in Jtable anpassen AWT, Swing, JavaFX & SWT 3
S Swing Inhalt eines Fenster bei Größenänderung anpassen (GroupLayout) AWT, Swing, JavaFX & SWT 2
F Swing Höhe eines Headers einer JTable anpassen AWT, Swing, JavaFX & SWT 4
M JCheckBox Icon anpassen AWT, Swing, JavaFX & SWT 2
G Swing Komponenten dem Hintergrundbild des JPanels anpassen? AWT, Swing, JavaFX & SWT 6
T Swing Dialoginhalt automatisch anpassen während Größenänderung AWT, Swing, JavaFX & SWT 2
M Swing JTextArea größe anpassen & setBackground liefer Nullpointer AWT, Swing, JavaFX & SWT 4
W JTabbedPane Größe anpassen AWT, Swing, JavaFX & SWT 4
W Swing JScrollpane Scroller/Pfeile anpassen AWT, Swing, JavaFX & SWT 7
S ImageIcon Grösse anpassen AWT, Swing, JavaFX & SWT 2
M Swing JTable anpassen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben