Maximale Größe von Border.Center ermitteln

Marc79

Mitglied
Hallo zusammen,

ich brauche wieder einen Ansatz oder einen Tipp.

Ich habe eine GUI, die aus mehreren verschalchtelten Layouts besteht.
Dadurch stelle ich sicher, dass alle Steuerelemten auf erschiedenen Bildschirmgrößen ordentlich dargestellt werden.

Soweit funktioniert auch alles super. Ich möchte nur noch ein Bild skalieren und muss dazu die noch maximal übrig gebliebene Größe ermitteln.

Die Maske sieht ungefähr so aus:

Oben eine Zeile als Kopfzeile
Mitte links ein gap (also nur ein Label als Abstand zum Rand)
Mitte Mitte ein Bild
Mitte rechts ein Menü mit Buttons
Unten eine Zeile als Fußzeile

So, das Bild selbst ist jetzt im HD-Auflösung und für einige Bildschirme zu groß.
Bevor ich jetzt unterschiedliche Bildgrößen erzeuge, wil ich es lieber skalieren.

Im Moment ist das Bild nicht ganz zu sehen, weil nur ein Teil im Bereich "Bild" sichtbar ist.

So wird aktuell das Bild platziert:
Code:
ImageIcon img = new ImageIcon (ClassLoader.getSystemResource("grfx/pi1.jpg"));
JLabel picLabel = new JLabel(img);
picPanel.add(picLabel, BorderLayout.CENTER);       // Bild wird in CENTER platziert

hiermit würde ich die Skalierung vornehmen:
Code:
img.setImage(img.getImage().getScaledInstance(w, h,Image.SCALE_DEFAULT));

Wenn ich für w und h feste Werte angebe, dann wird das Bild auch skaliert.

Doch, wie bekomme ich heraus, wie viel Platz für "Bild" noch zur Verfügung steht.

Ich habe da einen Ansatz, ich könnte alle Bereich, die schon bereits da sind von der Screen.Size abziehen und somit käme ich auf einen Wert der quasi übrig bliebe.

Ich denke nur, dass das ziemlich umständlich sein wird, sollte die Maske mal wachsen.

Gib es eine Möglichkeit zu sagen: Skalier so groß/klein, was noch übrig ist****?

Danke und Gruß
Marc
 
Hab das gleiche Problem, die Größe auslesen.. allerdings beim GridBagLayout.

Aber ich hab ne kleine Anmerkung:
Falls du dein Bild dynamisch skalierst (Also jedesmal, wenn die Größe des Fensters verändert wird, wird das Bild neu skaliert), dann wird das Bild durch deine Vorgehensweise immer unschärfer, da du das Bild aus dem (evtl. bereits skalierten) "img" nimmst, und nich das Original.

Wenn das Bild allerdings nur einmal Skaliert wird/werden soll, vergiss was ich geschrieben hab. :)


EDIT - Post ist zwar schon älter.. (Habs zu spät bemerkt)
Aber ich hab die LÖSUNG:

Also - Beim GridBagLayout, besser gesagt bei den GridBagConstrains gibts eine Variable "fill" - Die kann auf
HORIZONTAL , VERTICAL oder BOTH
gesetzt werden.
In deinem Fall müsstest du wahrscheinlich in deinem Border-Layout noch ein JPanel mit GridBagLayout einfügen. Dann kannst du dann die Größe des Components über die GridBagConstrains - hier speziell fill - anpassen.
 
Zuletzt bearbeitet:
Wenn ich mich nicht irre müsste es so gehen:
1. Erstelle ein Objekt BorderLayout
2. Setze dieses Layout in dein Panel
3. Erstelle das Label ohne ImageIcon und füge es deinem Panel hinzu
4. Nutze folgende Methode des BorderLayouts:
Java:
 Dimension preferredLayoutSize(Container target) 
          Determines the preferred size of the target container using this layout manager, based on the components in the container.
Das Target ist hierbei dein Label.
5. Skaliere dein Icon und setze es auf das Label.
 

Neue Beiträge

Zurück