# BoxLayout: Ausrichtung der Komponenten



## Gelöschtes Mitglied 12486 (28. Mai 2009)

Hallo,

ich habe ein JPanel auf dem ich mehrere Labels untereinander anzeigen lassen will. Dies habe ich über ein BoxLayout gelöst. Hier mal ein kleiner Beispielcode als Applet, damit ihr seht was mein Problem ist:


```
package jdomtest;

import java.awt.Color;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JApplet;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 *
 * @author huetz
 */
public class PanelTest extends JApplet{


    private Vector<JComponent> components = new Vector<JComponent>();
    private JLabel fileNameTitle, fileNameLabel, fileLengthTitle, fileLengthLabel;
    private boolean debugLabels = true;
    private JPanel myPanel;

    public void init(){
        this.setLayout(null);
        this.setSize(200,200);

        myPanel = new JPanel();

        myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.Y_AXIS));
        myPanel.setBounds(0, 0, 200, 200);
        components.add(myPanel);


        fileNameTitle = new JLabel("Dateiname:");
        fileNameTitle.setAlignmentX(RIGHT_ALIGNMENT);
        myPanel.add(fileNameTitle);
        components.add(fileNameTitle);

        fileNameLabel = new JLabel("test.xml");
        fileNameLabel.setAlignmentX(CENTER_ALIGNMENT);

        myPanel.add(fileNameLabel);
        components.add(fileNameLabel);

        fileLengthTitle = new JLabel("Dateigröße:");
        fileLengthTitle.setAlignmentX(RIGHT_ALIGNMENT);
        myPanel.add(fileLengthTitle);
        components.add(fileLengthTitle);

        fileLengthLabel = new JLabel(setFileLength(500));
        fileLengthLabel.setAlignmentX(CENTER_ALIGNMENT);

        myPanel.add(fileLengthLabel);
        components.add(fileLengthLabel);

        if(debugLabels)
            for(int i=0;i<components.size();i++){
                components.get(i).setBorder(BorderFactory.createCompoundBorder(
                       BorderFactory.createLineBorder(Color.red),
                       components.get(i).getBorder()));
            }

        this.add(myPanel);
    }

    public void setFileName(String name){
        fileNameLabel.setText(name);
    }
    public String setFileLength(long bytes){
        return ""+bytes+" Bytes";
    }
}
```
Wie das ganze aussieht, kann man im angehängten Bild IST.jpg sehen.

Also ich möchte, dass die die JLabels mit Dateiname und Dateigröße links ausgerichtet sind und die JLabels für die Werte, also der Name und die Größe, sollen mittig ausgerichtet werden. Das funktioniert auch gut, jedoch ist die imaginäre Achse, an denen diese nun ausgerichtet werden, leider nicht dort, wo ich sie gern hätte.

Ich hätte es gern so, wie auf dem angehängten Bild SOLL.jpg, jedoch weiss ich nicht, wie ich diese Achse so verschieben kann das es passt. Kann mir da jemand helfen?

edit: links = IST, rechts = SOLL


----------



## SlaterB (28. Mai 2009)

> fileNameTitle.setAlignmentX(RIGHT_ALIGNMENT);
passt irgendwie schlecht zum Wunsch, 'links auszurichten',
aber wenn man das wegnimmt, dann wird das insgesamt auch nicht viel besser,

ich schlage ein höheres Layout vor, Swing bietet GridBagLayout, externe Möglichkeiten sind vielleicht TableLayout oder andere,
dort teilst du deine GUI in ein Gitter aus Zeilen und Spalten ein, kannst für die Spalten feste breiten und/ oder Prozentwerte vergeben,
innerhalb der Gitter kannst du die Label dann auch noch ausrichten,

viel Arbeit sicherlich, für GridBagLayout siehe z.B. 
How to Use GridBagLayout (The Java™ Tutorials > Creating a GUI with JFC/Swing > Laying Out Components Within a Container)


----------



## Gelöschtes Mitglied 12486 (28. Mai 2009)

ja, das sollte auch LEFT_ALIGNMENT heißen... das war ein Versehen  hmm dann wirds wohl auf mehr Arbeit hinauslaufen. Danke für den Tip.


----------

