# LayoutManager der Elemente untereinander anordnet.



## jago (29. Mai 2008)

Hi,

Ich suche einen LayoutManager der JComponents (ca. 20) untereinander anordnet in einer Spalte. 

In der Breite sollen die JComponents der Breite des Containers angepasst werden. 
Veraendert man die Hoehe des Containers sollen die JComponents  weiterhin ihre preferred Hoehe behalten. GridLayout macht das ja leider nicht.

Wuerde am liebsten keine externen libs verwendern - also alleine mit Java Boardmitteln schaffen wenn es geht.

Danke...jago


----------



## L-ectron-X (29. Mai 2008)

GridBagLayout.


----------



## NoX (29. Mai 2008)

Da musste zum GridBagLayout greifen: http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.html


----------



## Guest (29. Mai 2008)

L-ectron-X hat gesagt.:
			
		

> GridBagLayout.



Wirklich...das ist doch so super-kompliziert. Keiner will diesen LayoutManager nutzen...

Habt ihr dann fuer mein Problem Beispielcode oder gibt es nicht doch einen einfacheren Layoutmanager fuer mein Problem?

Danke,
jago


----------



## Marco13 (29. Mai 2008)

Einfacher wäre vielleicht ein BoxLayout,.... ist wohl Ansichtssache....


----------



## thE_29 (30. Mai 2008)

Zb das hier: http://www.risner.org/java/VerticalFlowLayout.java_102.html


----------



## GilbertGrape (18. Jun 2008)

Vielleicht kann ich mich hier mal kurz einklinken...

Kann man bei dem BoxLayout auch festlegen, dass die Komponenten linksbündig angeordnet werden? Weil wenn ich das BoxLayout benutze, sind die Komponenten in der Mitte untereinander.

Danke, Gilbert


----------



## Marco13 (18. Jun 2008)

http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html#alignment  :!:  :?:


----------



## farmer (18. Jun 2008)

Hier eine interaktive GridBagLayout-Simulation:

http://www.vorlesungen.uni-osnabrueck.de/informatik/java97/code/applets/layout/C.html

Sehr schön zum experimentieren. Hat man sich ein nettes Layout geschrieben, müssen nur noch die Parameter abgeschrieben werden...


----------



## L-ectron-X (18. Jun 2008)

Anonymous/jago hat gesagt.:
			
		

> Wirklich...das ist doch so super-kompliziert. Keiner will diesen LayoutManager nutzen...
> Habt ihr dann fuer mein Problem Beispielcode oder gibt es nicht doch einen einfacheren Layoutmanager fuer mein Problem?


Ist doch gar nicht so schwer.

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GridBagTest extends JFrame {
   public GridBagTest(String title) {
      super(title);
      setSize(300, 600);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      JPanel panel = new JPanel(new GridBagLayout());

      GridBagConstraints gbc = new GridBagConstraints();
      JButton button1 = new JButton("1");
      gbc.fill = GridBagConstraints.HORIZONTAL;
      gbc.weightx = 1.0;
      panel.add(button1, gbc);
      
      JButton button2 = new JButton("2");
      gbc.fill = GridBagConstraints.HORIZONTAL;
      gbc.gridy = 1;
      panel.add(button2, gbc);
      
      JButton button3 = new JButton("3");
      gbc.fill = GridBagConstraints.HORIZONTAL;
      gbc.gridy = 2;
      panel.add(button3, gbc);
      
      JButton button4 = new JButton("4");
      gbc.fill = GridBagConstraints.HORIZONTAL;
      gbc.gridy = 3;
      panel.add(button4, gbc);
      
      //und so weiter...
      JButton button5 = new JButton("...und so weiter...");
      gbc.fill = GridBagConstraints.HORIZONTAL;
      gbc.gridy = 4;
      panel.add(button5, gbc);
      
      JButton button20 = new JButton("20");
      gbc.fill = GridBagConstraints.HORIZONTAL;
      gbc.anchor = GridBagConstraints.NORTH;
      gbc.weighty = 1.0;
      gbc.gridy = 6;
      panel.add(button20, gbc);
      
      add(panel);
   }

   public static void main(String[] args) {
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {
         e.printStackTrace();
      }
      new GridBagTest("GridBagTest").setVisible(true);
   }
}
```
Immer noch Fragen?


----------



## Krondor (19. Jun 2008)

Per BoxLayout kann man mit etwas geschick Komponenten auch linksbündig anbringen. Einfach en bißchen schachteln.

Ich skizziere das mal:


```
public void createGUI() {
  JPanel pnl = new JPanel();
  pnl.setLayout(new BoxLayout(pnl1, BoxLayout.PAGE_AXIS); //Vertikal
  
  //.... Erstellen der Komponenten kommt hier hin
  pnl.add(getLeftAlignedComponent(comp1);
  pnl.add(getLeftAlignedComponent(comp2);
  pnl.add(getLeftAlignedComponent(comp3);

  //.... JPanel pnl ins Fenster einfügen etc.
}

public JPanel getLeftAlignedComponent(JComponent comp) {
  JPanel pnlTemp = new JPanel();
  pnlTemp .setLayout(new BoxLayout(pnlTemp , BoxLayout.LINE_AXIS); //Horizontal
  pnlTemp.add(comp);
  pnlTemp.add(Box.createHorizontalGlue());
  return pnlTemp;
}
```

So grob halt....


----------



## byte (19. Jun 2008)

GridBagLayout ist der letzte Mist, weil kompliziert und man muss viel zu viel Code schreiben. TableLayout ist da wesentlich kompakter und schöner. Ansonsten für einfache Sachen halt BorderLayout, FlowLayout und BoxLayout.

Mit BoxLayout könnte es so in der Art funktionieren (ungetestet):


```
public static JPanel newVerticalPanel() {
			JPanel panel = new JPanel();
			panel.setAlignmentX(Component.LEFT_ALIGNMENT);
			panel.setAlignmentY(Component.TOP_ALIGNMENT);
			BoxLayout layout = new BoxLayout(panel, BoxLayout.PAGE_AXIS);
			panel.setLayout(layout);
			return panel;
		}
```

Dort einfach mit #add() die Komponenten hinzufügen und sie sollten vertikal und links-zentriert angeordnet sein.


----------

