# Swing: mehrere Layouts verwenden



## snoop83 (1. Mai 2005)

Hallo!

Bin absoluter Java-Newbie ..  ..hab vorher nur mit C (++) und Pascal programmiert. Leider gefällt mir die Oberflächenprogrammierung mit Java überhaupt nicht, aber ich bin z.Z. dazu gezwungen, eine solche zu implementieren.

Habe mich schon dank div. Beispiele eingearbeitet.

Ich machs kurz: Meine Frage: Ist es möglich ein erstelltes Gridlayout nochmals zu unterteilen?

Falls ja, wie? Kurzes BSP?

Hintergrund: Ich brauche ein Gridlayout (1,2) und das rechte muss dann nochmal ein Gridlayout (1,5) unterteilt werden.

brauche dringend Hilfe..


----------



## snoop83 (1. Mai 2005)

hab ein wenig rumexperimentiert .. es hat geklappt, ich weiß aber nicht, ob das so erlaubt ist oder ob es nur Zufall war:


```
panel1  = new JPanel(new GridLayout(1,2)); // 2 Spalten
  panel2  = new JPanel(new GridLayout(3,1)); // 3 Zeilen
  
  button1 = new JButton("Button1");
  button2 = new JButton("Button2");
  button3 = new JButton("Button3");
  button4 = new JButton("Button4");
  button5 = new JButton("Button5");  
  
  panel1.add(button1);
  panel1.add(panel2);   // rechte Spalte -> 3 zeilen
  
  panel2.add(button2);
  panel2.add(button3);
  panel2.add(button4);
```


----------



## Roar (1. Mai 2005)

layouts verschachteln ist gang und gebe und "erlaubt"

wenn dein layout noch komplizierter wird empfehl ich dir ein umfangreicheres layout wie TableLayout. mache leute, die nix besserss zu tun haben als stundenlang an guis zu sitzen, benutzen auch gridbaglayout  (was ebensoviel kann )


----------



## Scotty (1. Mai 2005)

Roar hat gesagt.:
			
		

> mache leute, die nix besserss zu tun haben als stundenlang an guis zu sitzen, benutzen auch gridbaglayout  (was ebensoviel kann )


gridbag würde ich nicht empfehlen. ws bietet zwar umfangreiche verschachtelungsmöglichkeiten, aber man braucht vorher einen lageplan auf papier um sich nicht zu verschachteln und den durchblick zu behalten. außerdem ist es im nachhinein schwierig, elemente hinzuzufügen. dann lieber mehrere grids schachteln (siehe beispiel).


----------



## Roar (1. Mai 2005)

Scotty hat gesagt.:
			
		

> Roar hat gesagt.:
> 
> 
> 
> ...


kann ich nix zu sagen, ich habs noch nie benutzt


----------



## Beni (1. Mai 2005)

Alles eine Frage der Übung Scotty :wink:


----------



## snoop83 (1. Mai 2005)

ok super dann bleib ich beim gridlayout und versuch mein glück!

danke für die schnellen antworten!


----------



## snoop83 (1. Mai 2005)

2 Fragen:

1.

wie kann ich bei einem

```
new Gridlayout(3,1)
```
bestimmen, dass die zweite zeile nicht genauso hoch ist wie die erste .. oder geht das nicht?

2.


```
ta_chatausgabe = new JTextArea(5,40); // 5 Zeilen, 40 Spalten
ta_chatausgabe.setLineWrap(true);     // lange Zeilen umbrechen!
scrollpane = new JScrollPane(ta_chatausgabe);
hauptfenster.getContentPane().add(scrollpane);
```
wie füge ich jetzt die scrollpane dem textare hinzu?


----------



## Roar (1. Mai 2005)

1. tja, das ist halt gridlayout :-/

2.äh? der code ist doch korrekt. die scrollbars erscheinen natürlich nur dann wenn mehr text in der textarea ist als reinpasst...


----------



## snoop83 (1. Mai 2005)

1. also geht das nicht mit dem gridlayout? verdammt, dann muss ich das doch irgendwie anders machen


2. die scrollbar erscheint aber nicht, egal wie viel text ich eingebe..


----------



## Wildcard (1. Mai 2005)

snoop83 hat gesagt.:
			
		

> 2. die scrollbar erscheint aber nicht, egal wie viel text ich eingebe..


und du fügst 'ta_chatausgabe' ( '_' bitte nur bei Konstanten verwenden) auch nicht aus versehen nochmal an anderer Stelle in eine Komponente ein?


----------



## snoop83 (1. Mai 2005)

doch, auf ein panel natürlich:


```
private JTextArea  ta_chatausgabe;

	ta_chatausgabe = new JTextArea(5,40); // 5 Zeilen, 40 Spalten
	ta_chatausgabe.setLineWrap(true);     // lange Zeilen umbrechen!
	scrollpane = new JScrollPane(ta_chatausgabe);
	hauptfenster.getContentPane().add(scrollpane);

	p_gesamt.add(ta_chatausgabe);
```

( p_gesamt ist ein panel, das wiederrum liegt auf meiner frame "hauptfenster" )


----------



## Wildcard (1. Mai 2005)

auf des Panel musst du die ScrollPane legen und NICHT die Textarea(damit entfernst du die TextArea nämlich wieder aus der ScrollPane)!


----------



## Gast (1. Mai 2005)

hm, versteh ich jetzt nicht ganz .. bin wie gesagt newb 

kannst mir das am quellcode verdeutlichen,w o genau der fehler steckt?


----------



## snoop83 (1. Mai 2005)

^ die antwort kam natürlich von mir, war nicht eingeloggt, anderer rechner..


----------



## Wildcard (1. Mai 2005)

statt

```
p_gesamt.add(ta_chatausgabe);
```


```
p_gesamt.add(scrollpane);
```


----------



## snoop83 (1. Mai 2005)

tatsächlich, funzt astrein! ist mir aber nicht 100%ig klar ..

DANKE


----------



## Wildcard (1. Mai 2005)

Eine Komponente kann immer nur in *einem* Container liegen.
Also kommt die TextArea in die ScrollPane, und dann die ScrollPane ins Panel.
Du fügst also eigentlich deiner TextArea keine Scrollbalken zu, sondern setzt die TextArea in einen Container der scrollen kann.
Besser verständlich?


----------



## snoop83 (1. Mai 2005)

Ah.. jetzt ergibts Sinn! Auch wenn ich das so nicht 100%ig aus dem Quelltext rauslesen kann..

Das mag ich aber nicht an Java .. ist mir fast ZU objektorientiert ...

aber danke, so ist's verständlich ..

> _Also kommt die TextArea in die ScrollPane, und dann die ScrollPane ins Panel._
andersrum wär's mir einleuchtender *g*


----------



## Roar (1. Mai 2005)

snoop83 hat gesagt.:
			
		

> Ah.. jetzt ergibts Sinn! Auch wenn ich das so nicht 100%ig aus dem Quelltext rauslesen kann..
> 
> Das mag ich aber nicht an Java .. ist mir fast ZU objektorientiert ...


wahrscheilnich c++ vorbelastet 



> > _Also kommt die TextArea in die ScrollPane, und dann die ScrollPane ins Panel._
> andersrum wär's mir einleuchtender *g*



warum. die textarea ist eine komponente wo man text reinschrieben kann. die JScrollPane ist ein container, die scrollbalken darstellt und wo man eine komponente reintun kann.


----------

