# position im FlowLayout



## Guest (2. Feb 2008)

hey,

ich kann mein label nicht dorthin setzen, wo ich möchte..
hab ein FlowLayout, und:

add(label)

setzt das label nach links,
aber auch:

getContentPane().add(label,"North" );

geht nicht, setzt das label wieder nach links..
wie positionier ich denn das label in einem FlowLayout?

Hier noch meine Klasse, falls ihr das braucht:


```
public class View extends JFrame{
	
        private Label label;

	public View(){
		super();
		setLayout(new FlowLayout());
      	        setDefaultCloseOperation(EXIT_ON_CLOSE); 
      	
      	        label = new Label("hallo...");
		label.setFont(new Font("Helvetica", Font.PLAIN, 12));
		add(label);

      	        pack();
      	        setVisible(true);
	}
}
```


----------



## Guest (2. Feb 2008)

Hi,

versuchs mal mit

```
panel.add(Labe1bezeichnung, FlowLayout.RIGHT);
```

Müsste klappen,

Gruß monet


----------



## hdi (2. Feb 2008)

da bekomme ich leider eine NullPointer-Exception, sobald ich das Programm starte.
Er erstellt erst gar kein Fenster...

Ich glaube, ich hab zuwenig Infos gegeben, weil hier keine Antworten kommen (deine war jetzt die erste seit nem Tag oder so).

Also so sieht meine Klasse genauer aus:

```
public class View extends JFrame{
	
	private SnakePanel panel;
	private Label label;
	private int key;
	
	public SnakePanel getPanel(){
		return panel;
	}
	
	public int getKey(){
		return panel.getKey();
	}
	
	public void setText(String text){
		label.setText(text);
    }
	
    public void sleep(long millis) {
	try {Thread.sleep(millis);} catch (Exception e){}
    }

	public View(Worm w, Fruit f){
		super();
		setLayout(new FlowLayout());
      	setDefaultCloseOperation(EXIT_ON_CLOSE); 
      	
      	label = new Label("f");
	label.setFont(new Font("Helvetica", Font.BOLD, 14));
        // <------------------------------------------------------------ was hier? die oben erwähnten sachen funzen nicht.
        // ------------------------------------------------------ ich will das label oben ins fenster hinein tun.

        panel = new SnakePanel(w,f);
        panel.setPreferredSize(new Dimension(Data.HOR_RES, Data.VER_RES));
      	add(panel);

      	pack();
      	setVisible(true);
	}
}
```


----------



## Gast2 (2. Feb 2008)

1.Misch kein AWT und Swing (JLabel...)
2.willst du das label auf das panel oder auf das Frame adden????

auf das Frame

getContentPane().add(label,FlowLayout.RIGHT)


----------



## Guest (2. Feb 2008)

hi,

hast du es mal mit einem Aufruf von contantPane versucht und dann das FlowLayout eingesetzt.
Eigentlich bietet das FlowLayout noch die Positionierung "CENTER" und "LEFT".  Kannst Du nochmal
den Code mit meinem Vorschlag posten?

Ich muss Dir noch sagen, dass ich auch ein Newbie bin, also erwarte nicht zu viel :roll: 


Gruß monet


----------



## Guest (2. Feb 2008)

oh man,

stimmt, 
	
	
	
	





```
public class View extends JFrame
.........
label = new Label("f");
   label.setFont(new Font("Helvetica", Font.BOLD, 14));
```
gar nicht gesehen


----------



## hdi (2. Feb 2008)

getContentPane().add(label,FlowLayout.RIGHT)

geht auch nicht, kann compilen aber bei der ausführung kommt kein fenster sondern der fehler:



> Exception in thread "main" java.lang.IllegalArgumentException: illegal component position
> at java.awt.Container.addImpl(Container.java:1011)
> at java.awt.Container.add(Container.java:395)
> at View.<init>(View.java:42)
> at Snake.main(Snake.java:42)



was isn da los? ich hab n label und n panel, und n flowlayout, wieso kann ich mein label nicht adden??
(es geht ja über add(label), aber dann haut er es eben nach links rein, ich will es nach oben)


----------



## Gast2 (2. Feb 2008)

schick mal dein code wie du es versucht hast


----------



## Guest (2. Feb 2008)

hdi hat gesagt.:
			
		

> ich will es nach oben



dann wäre vielleicht BorderLayout angebracht, z.B. NORTH


----------



## babuschka (2. Feb 2008)

Hallo,

soweit mir bekant ist, ist es unmöglich, einzelne Labels in einem Container mit FlowLayout auszurichten.
Ein FlowLaoyut ordnet alles Komponenten des Containers nebeneinander an, die Konstanten LEFT,CENTER und RIGHT geben lediglich die Orientierung ALLER Komponenten an.

In deinem Fall empfiehlt sich, wie schon von meinem Vorredner empfohlen, ein BorderLayout:


```
Container.setLayout(new BorderLayout());
Container.add(Panel,"NORTH");
```

Grüße,

Maximilian


----------



## Guest (3. Feb 2008)

danke, passt


----------



## André Uhres (3. Feb 2008)

MaximilianW hat gesagt.:
			
		

> ..Ein FlowLayout ordnet alle Komponenten des Containers nebeneinander an,
> die Konstanten LEFT,CENTER und RIGHT geben lediglich die Orientierung ALLER Komponenten an..


Das stimmt. Dennoch erlaubt die Eigenschaft "PreferredSize" genaue Positionierungen :wink:


----------

