Java JFrame Fensterbreite an WindowDecoration anpassen

  • Ersteller Ersteller Robert Alpha
  • Erstellt am Erstellt am
R

Robert Alpha

Gast
Hallo zusammen,

wenn ich ein JFrame erstelle, und die Größe mit (400,300) angebe, definiert dies ja die Größe des gesamten Fensters, inklusive eventueller Dekoration.

Wenn ich also als Größe eines JFrame 400x300 einstelle, und an die Position (10,10) einen Button der Größe 380x280 einfüge, liegt dieser bei einem undekorierten JFrame genau in der Mitte, mit einem gleichmäßigen Rahmen drumrum,
bei einem dekorierten JFrame fehlen in X-Richtung jedoch ca. 20, in Y-Richtung ca. 40 Pixel, so dass der Button vom Fensterrahmen überlagert wird.

Jetzt stellt sich die Frage, wie ich die tatsächliche Größe des sichtbaren Bereichs des JFrames feststellen kann, um z.B. Buttons tatsächlich zentriert anzeigen zu können, ohne x-mal ausprobieren zu müssen, ob der Abstand stimmt, z.B. indem ich die Größe der jeweiligen Dekoration (bei WinXP,7,8, resizable oder non-resizable ja jedes Mal anders) bestimme?

Viele Grüße,
 
Üblicherweise verwendet man einen Layout-Manager zur Anordnung der Widgets in einem Fenster. Damit hat man solche Probleme nicht und das zeigt schon, warum Dein Ansatz der falsche ist. Ich empfehle MigLayout (funktioniert mit Swing, JavaFx und SWT).
 
Danke für den Hinweis, ich werd mir MigLayout mal näher anschauen.

Für Fälle, in denen keine Elemente platziert werden sollen, sondern ich z.B. einen Rahmen mit gleichmäßigem Rand zeichnen will, gibts da keine Möglichkeit, das Übermaß rauszubekommen?
 
Robert Alpha schrieb:
Danke für den Hinweis, ich werd mir MigLayout mal näher anschauen.

Man kann natürlich auch die Layout-Manager des JDK oder sonstige Alternativen verwenden. MigLayout ist IMHO aber der beste momentan verfügbare Layout-Manager, mit dem man eigentlich alle Anwendungsfälle erschlagen kann. Und das nicht nur für Swing.

Robert Alpha schrieb:
Für Fälle, in denen keine Elemente platziert werden sollen, sondern ich z.B. einen Rahmen mit gleichmäßigem Rand zeichnen will, gibts da keine Möglichkeit, das Übermaß rauszubekommen?

Dafür nimmt man eine javax.swing.Border Implementation (oder erstellt sich eine eigene) und setzt sie für den gewünschten Container. Die Größe (des Containers) liefert Swing dann automatisch. Ich würde nicht versuchen, möglichst viel selbst zu erfinden, sondern regen Gebrauch von dem vorhandenen Framework zu machen.
 

Ähnliche Themen

Antworten
8
Aufrufe
14.845
Donnidonis
D
Zurück
Oben