JLearner: Layoutmanager - Grösse JPane()

Hallo zusammen

Gestern hatte mir Slyh bei einem Problem mit dem Layoutmanager weiterhelfen können. Da es nun ein neues Problem gibt, gibts auch ein neuer Thread.

Situation: Ich habe in meinem JInternalFrame ein GridLayout zugewiesen. Diesem GridLayout wurde wiederum 2 JPanel zugewiesen. Diese zwei JPanel haben wiederum ein GridBoxLayout. So kann ich im ersten JPanel die Formularfelder und im zweiten JPanel darunter die Buttons anzeigen lassen (Schön zentriert).

Problem: Die beiden JPanels teilen Sie die verfügbare grösse exakt und das sieht etwa so aus

-----------------
Panel1 (mit Formularfeldern)
-----------------
Panel2 (mit Buttons)
-----------------

Ich möchte aber nicht dass das JPanel mit den Formularfeldern gleich gross ist wie das JPanel mit den Buttons. Das ergibt riesige Buttons. Nun habe ich versucht den JPanel's mit setSize() und setMaximumSize() eine Grösse zuzuweisen. Das wird aber ignoriert. Wie kann ich das lösen, damit mein Frame so aussieht?:

-----------------
Panel1 (mit Formularfeldern)

-----------------
Panel2 (mit Buttons)
-----------------

Das heisst ich möchte einfach das Verhältnis ändern...!

Gruss JLearner!

  1. Hallo,

    Ich möchte aber nicht dass das JPanel mit den Formularfeldern gleich gross ist wie das JPanel mit den Buttons. Das ergibt riesige Buttons. Nun habe ich versucht den JPanel's mit setSize() und setMaximumSize() eine Grösse zuzuweisen. Das wird aber ignoriert. Wie kann ich das lösen, damit mein Frame so aussieht?:

    Nimm für das InternalFrame kein GridLayout. Das GridLayout macht alle
    Zellen gleich groß. Und da die Komponenten in der Zelle so groß wie
    die Zelle wird, sind auch die Komponenten alle gleich groß.

    Nimm für das InternalFrame auch wieder ein GridBagLayout. Setze dabei
    die Constraint-Variable "weighty" für das obere Panel auf 1 und für
    das untere Panel auf 0.

    Vermutlich tut es statt dem GridBagLayout auch ein BorderLayout im
    InternalFrame. Das dürfte schneller sein.
    Platziere das obere Panel ins Zentrum (CENTER) und das untere Panel
    in den Süden (SOUTH).
    Komponenten im Norden und Süden werden in ihrer Breite auf die
    Gesamtbreite ausgedehnt, während sie in der ihrer Höhe nur die
    bevorzugte Größe einnehmen. Komponenten im Westen und Süden behalten
    ihre Breite, nehmen aber die gesamte Höhe ein. Die Komponente in der
    Mitte nimmt den restlichen Platz ein. Da du nur noch eine Komponente
    unten hast, wird das obere Panel die gesamte Breite und restliche
    Höhe einnehmen.

    Gruß
    Slyh

    1. Hallo Slyh

      Habe ein BorderLayout verwendet...und es klappt! Gruss JLearner