Zwei-Spalten Layout [Swing]

Status
Nicht offen für weitere Antworten.

Johannes L.

Aktives Mitglied
Hallo,

es kann doch nicht so schwer sein ein simples Zweispalten Layout hinzubekommen.

Links sollen 3 (J)Labels untereinander stehen, rechts entsprechend Textfelder, die jeweils zu dem links stehenden Label gehören, darunter ein OK- sowie ein Cancel-Button und das ganze zentriert in einem kleinen Fenster.

Ich habe nun schon einiges probiert, aber es einfach nicht geschafft die Komponenten richtig anzuordnen :-/

Nun habe ich vorhin mal mit folgendem Codeschnipsel aufgegeben, wobei die Panels jetzt leider statt untereinander nebeneinander dargestellt werden...

Code:
        frame.setLayout(new FlowLayout(FlowLayout.CENTER));
        
        Panel firstPanel = new Panel();
        firstPanel.setLayout(new GridLayout(1,2));
        firstPanel.add(lserver);
        firstPanel.add(server);
        
        Panel secondPanel = new Panel();
        secondPanel.setLayout(new GridLayout(1,2));
        secondPanel.add(lnickname);
        secondPanel.add(nickname);
        
        JButton button_ok = new JButton("OK");
        button_ok.setActionCommand("ok");
        button_ok.addActionListener(this);
        
        JButton button_cancel = new JButton("Cancel");
        button_cancel.setActionCommand("cancel");
        button_cancel.addActionListener(this);
        
        firstPanel.setVisible(true);
        secondPanel.setVisible(true);
        frame.add(firstPanel);
        frame.add(secondPanel);
        frame.add(button_ok);
        frame.add(button_cancel);

Viele Grüsse,
Johannes
 
Wildcard hat gesagt.:
Warum machst du nicht alles auf ein Panel und nimmst GridLayout(3,2)? :bahnhof:

Das war natürlich mein erster Gedanke, nur die Labels ragten irgendwie links aus dem Fenster raus, bzw. der Labeltext war nur etwa zur Hälfte sichtbar, was aber wohl daran lag, dass ich die Methode pack() vergessen hatte aufzurufen.

Nun sind die Label und Textfelder richtig angeordnet, nur die Buttons erscheinen noch rechts davon.

Abgesehen davon wäre es ganz schön wenn die Breite der linken Spalte auf die längste Breite eines Labels gesetzt werden könnte und die Textfelder in der Rechten spalte etwas länger sein könnten. Laut API scheint es da aber nichts für das GridLayout zu geben, müsste man da das GridBagLayout verwenden? Wenn ja könnte eventuell jemand ein kleines Beispiel posten, ich komme da leider auf keinen grünen Zweig :-/

mein zweites kleines Problemchen ist, dass ich für meinen kleinen IRC-Client im Hauptfenster unten links den nicknamen stehen haben will und rechts daneben ein Textfeld, welches zur Eingabe dient und über die ganze Breite langen soll, leider finde ich keinen Weg, wie ich diesen auf die 100% Breite bringe. Ich denke dazu brauche ich keinen neuen Thread zu eröffnen.

Code:
        // create status line
        FlowLayout l;
        
        statusLine = new JPanel();
        statusLine.setLayout(l = new FlowLayout());
        l.setAlignment(FlowLayout.LEFT);
        
        // add Label
        lnickname = new JLabel("nickname");
        
        // add TextField
        JTextField messages = new JTextField();
        
        statusLine.add(lnickname);
        statusLine.add(messages);
        
        add(statusLine, BorderLayout.SOUTH);

ein etwas frustrierter Johannes
 
Das die Buttons rechts erscheinen liegt daran das du ein FlowLayout verwendest.
Im GridLayout sind immer alle Zellen gleich groß. Wenn das für dich ungeeignet ist bleibt dir nichts anderes übrig als LayoutManager zu verschachteln, oder das (etwas komplizierte) GridBagLayout zu verwenden.
Es gibt auch externe Bibliotheken die du verwenden kannst. Das TableLayout soll zB sehr gut sein.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben