Layoutmanager?

the_skywalker

Mitglied
Hallöchen,

ich habe vor einiger Zeit ein paar Programme geschrieben und dabei keinen "richtigen" Layout-Manager verwendet, habe das null-Layout verwendet. Mir waren die verschieden Layout-Manager irgendwie zu kompliziert. Jetzt allerdings will ich meine Programme ändern. Welcher Layout-Manager ist denn am besten geeignet? Ich erzeuge ein JPanel mit mehereren untereinanderliegenden Textfelder und jeweils ein Label davor.
Das null-Layout war davür optimal, doch die Programme sollen auf verschieden PC's laufen und da jeder eine andere Auflösung hat und die Bildschirme unterschiedlich groß sind, passen die Frames nicht immer darauf. Und ein null-Layout scrollbar zu machen funktioniert irgendwie auch nicht, oder doch?

Also welcher Layout-Manager ist der "beste" und wie kann ich den verwenden?

MfG

Stefan (Luke)
 
Für den Fall scheint mir das GridLayout geeignet, alternativ auch das flexiblere GridBagLayout.
Das Beispiel in der API-Doku sollte eigentlich ausreichen. Dazu ein ScrollPane bzw. JScrollPane und Du hast auch Bildlaufleisten..

Es gibt nicht "den Besten" LayoutManager, jeder hat seine Anwendungsfälle.

Beispiel:
Code:
package gridBagLayoutSample;

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

/**
 * @author Hans Peter von Welt
 */
public class GridBagFrame extends JFrame {

    public GridBagFrame() {
        super("GridBagFrame");
        //Panel als Container
        JPanel p = new JPanel();
        //Panel in ScrollPane
        JScrollPane sP = new JScrollPane(p);

        //GridBagLayout vorbereiten und dem Panel zuführen
        GridBagLayout gBL = new GridBagLayout();
        GridBagConstraints gBC = new GridBagConstraints();
        p.setLayout(gBL);

        //Label und Textfeld deklarieren
        JLabel l;
        JTextField tF;

        //Wenn Element kleiner als Zelle, linksbündig
        gBC.anchor = GridBagConstraints.WEST;

        //200 Label und Textfelder als Beispiel erzeugen
        for (int i = 0; i < 200; i++) {
            //Label linksbündig
            l = new JLabel("Label " + i);
            //nicht skalieren
            gBC.fill = GridBagConstraints.NONE;
            //Nimm so wenig Platz, wie Du benötigst
            gBC.weightx = 0.0;
            //Zeile mit 2 Zellen
            gBC.gridwidth = 2;
            //Innenabstand der Label-Zelle
            gBC.insets = new Insets(1, 4, 1, 4);
            gBL.setConstraints(l, gBC);
            p.add(l);

            //Textfeld rechtsbündig, skalierend
            tF = new JTextField();
            //Horizontal skalierend
            gBC.fill = GridBagConstraints.HORIZONTAL;
            //Nimm so viel Platz, wie Du kriegen kannst
            gBC.weightx = 1.0;
            //ist letztes Element der Zeile
            gBC.gridwidth = GridBagConstraints.REMAINDER;
            //Innenabstand der Label-Zelle
            gBC.insets = new Insets(1, 1, 1, 1);
            gBL.setConstraints(tF, gBC);
            p.add(tF);
        }

        //Für das Fenster ein BorderLayout, um das Panel
        //in die Mitte zu packen.
        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(sP, BorderLayout.CENTER);

        //Fenstergröße 400 x 500
        this.setSize(400, 500);

        //Wenn Fenster geschlossen wird,
        //Anwendung beenden.
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Anzeigen
        this.show();
    }

    public static void main(String[] args) {
        new GridBagFrame();
    }
}
 
Zurück