Dimensionierung von Fensterkomponenten feststellen

kodela

Bekanntes Mitglied
Hallo Java-Freunde,

bin neu hier und habe gleich ein Problem.

Ich möchte ein Standard-Fenster mit folgenden zusätzlichen Eigenschaften erzeugen:

1. Neben der Titel- und der Menüzeile soll eine Symbol- und eine Statusleiste angezeigt werden.
2. Das Fenster soll in seiner Größe nicht veränderbar sein.
3. Der übrige Raum soll eine feste vorgegebene Größe haben.

Die dritte Bedingung ist es, die mir ein Problem bereitet. Ich kann zwar ein Fenster
mit einer vorgegebenen Größe erzeugen. Diese Größe bezieht sich jedoch auf die
Außenabmessung und nicht auf den Innenbereich, auf den es mir ankommt.

Es müsste für die Höhe des Fensters zur Höhe des Innenbereiches die Höhen der
Titelzeile, der Menüleiste, der Symbolleiste, der Statusleiste und die Stärke des unteren
Rahmens addiert werden. Für die Breite brauche ich nur zweimal die Rahmenstärke.

Trotz intensiver Suche habe ich aber bisher keine Möglichkeit gefunden, die Dimensionierung
dieser Komponenten vor Erzeugung des Hauptfensters festzustellen.

In C++ und Borlands Object Windows Library konnte ich zum Beispiel die Höhen für
die Titel- und die Menüzeile sowie die Stärke des Rahmens wie folgt auslesen.

int TitelHoehe = GetSystemMetrics(SM_CYCAPTION);
int MenueHoehe = GetSystemMetrics(SM_CYMENU);
int RandStaerke = GetSystemMetrics(SM_CXFIXEDFRAME);​

Mit Sicherheit gibt es eine entsprechende Möglichkeit auch mit Java, nur habe ich sie
bisher leider nicht gefunden.

Es würde mir sehr helfen, wenn mir jemand einen Hinweis geben könnte.

Mit freundlichem Gruß,

kodela
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Hi, ich bin mir nicht sicher ob ich dich richtig verstanden habe, aber ich habe es so verstanden, dass du die Fläche/Größe ermitteln möchtest, ohne die Titelbar usw., sondern nur den "reinen Contentbereich" ?

Diesen müsstest du eig. wenn ich mich nicht irre mit getSize des Panels/ContentPanes ermitteln können?

Java:
frame.getContentPane().getSize();
//bzw:
panel.getSize(); //wenn das zuvor auf dne frame geaddet wurde

bzw du willst es ja setzen oder?
Java:
//Der Contentbereich soll x*y groß sein
	panel.setPreferredSize(new Dimension(x, y));
	frame.add(panel);
	frame.setResizable(false);
	frame.pack();

Müßte klappen :D
 
Zuletzt bearbeitet:

kodela

Bekanntes Mitglied
Hallo eRaaaa,

danke für Deine Antwort. Leider hilft sie mir nicht weiter, da ich nicht die Größe des Innenbereiches sondern die des Fensters bei einer vorgegebenen Größe des Innenbereiches ermitteln will. Dazu brauche ich die Dimensionen der Komponenten wie menubar und border. So ist die zu setzende Fensterbreite die Breite des Innenbereiches plus zweimal die von border.

Bei der Höhe kommen die Titelzeile, die Menü-, die Symbol- und die Statusleiste dazu.

Mit freundlichem Gruß,

kodela
 
G

Gastredner

Gast
Die Werte der Fensterdekoration sind, wenn ich mich nicht irre, unter Java nicht abfragbar.

Behelfen könntest du dir aus meiner Sich höchstens, indem du die Fensterdekoration durch das SystemLookAndFeel zeichnen lässt (JFrame.setDefaultLookAndFeelDecorated(true)), die entsprechenden Maße selbst abmisst und dann dementsprechend hardcoded in dein Programm setzt (und das LookAndFeel selbst festlegst).
 
Zuletzt bearbeitet von einem Moderator:

kodela

Bekanntes Mitglied
Hallo eRaaaa,

Dein Tipp war absolut super. Entschuldige bitte, dass ich seine Bedeutung nicht sofort erkannt habe. Ich war zu sehr in meinem Denken auf die Komponenten-Dimensionen ausgerichtet. Die sind aber überhaupt nicht erforderlich, wenn man so vorgeht, wie Du es empfohlen hast.

Nochmals herzlichen Dank für diesen Tipp.

kodela
 

Ähnliche Java Themen


Oben