# Welcher Layoutmanager?



## joschika77 (30. Jun 2004)

Hallo Leute!

Ich bin dabei ein Prog zu erstellen in dem ich nicht immer das null Layout habe und mein Fenster auf eine bestimmte
Größe festlegen muß.Habe schon ein bißchen mit GridbagLayout rumgefummelt.Ist sehr komisch was er da macht.
Welches Layout ist am besten?Wie kann man realisieren, wenn das Frame maximiert wird das dann auch der Inhalt(Buttons usw.) automatisch mitwächst?

MfG


----------



## thE_29 (30. Jun 2004)

TableLayout musst im google suchen!

Man kann bei dem TableLayout sagen wie es aussehen soll (also  Tabellen mässig)

Bsp.:

```
double [][]sizes  {{0.1,0.2,0.5,0.2} //Spalten
,{0.2,0.2,0.3,0.3}}; //Reihen

this.getContentPane().setLayout(new TableLayout(sizes));  //oder zuweisen wie du es brauchst

//adden

this.getContentPane().add(jtComp,"1,1,2,2,c,c"); // würde das Objekt von 2ter bis 3ter Zelle und 2te bis 3te Reihe machen (Spalten fangen mit 0,1,2,3 an) und c = center, da gibts noch t = top, b = bottem, l = left, r = right!
```

So kannst du alles genau hinpositionieren wo du willst, aber wenn in einer Zelle nix drinnen ist, isses egal, du musst keine leeren Plätze definieren!

http://www.clearthought.info/software/TableLayout/ (geht zz Net)
http://java.sun.com/products/jfc/tsc/articles/tablelayout/


----------



## L-ectron-X (30. Jun 2004)

Das lässt sich mit z.B. dem GridLayout machen.


----------



## thE_29 (30. Jun 2004)

das macht das TableLayout auch  (sogar sehr gut!! - das mit dem resizen!)

Du musst bei sizes am Ende noch TableLayout.FILL machen, hab ich oben vergessen!


----------



## joschika77 (30. Jun 2004)

Hab es jetzt so!


```
private void fensterkomponenten()
	{
        double size[][] =
            {{0.25, 0.25, 0.25, 0.25},
             {50, TableLayout.FILL, 40, 40, 40}};

        neo.getContentPane().setLayout(new TableLayout(size));
```

Er kennt TableLayout nicht.Was kann das sein?

MfG


----------



## jopp (30. Jun 2004)

TableLayout ist sicher eine gute Wahl. Bietet eigentlich alle Möglichkeiten um eine übersichtliche Oberfläche zu erstellen.

mfg

jopp


----------



## L-ectron-X (30. Jun 2004)

Das TableLayout gehört nicht zu den originalen Sun-Java Standard-Packages.
Du musst Dir ein jar-File aus dem Internet laden und Deiner VM bekannt machen.
In einer zum Download liegenden Version sind glaube ich auch die Quellcode-Klassen, die Du Deinen eigenen Klassen hinzufügen kannst.
http://www.clearthought.info/software/tablelayout/


----------



## thE_29 (30. Jun 2004)

joschika hat gesagt.:
			
		

> Hab es jetzt so!
> 
> 
> ```
> ...




Jo, du musst das leider einbinden, finde es aber besser als alle anderen Layouts von Java!

Und das mit dem TableLayout.FILL hast auch falsch verstenaden!

Das Ding macht das (fallst du ein paar Pixel vergessen hast) das es auch voll ist, also das TableLayout.FILL muss als letzter Param!

Außerdem sind die Zahlen drinnen Prozent angaben, dh, 0.25 = 25% und 50 = 5000% (schon ein bisi viel oder  )

Deswegen hat das der Typ was das TableLayout gemacht hat auch ausgedacht, das wenn man keinen % Angaben macht, das Pixel sind (aber ich würd sie eigentlich net mischen!)

Mach immer mit 0.2, 0.3,0.5,TableLayout.FILL (immer schön 1 ergeben die kommazahlen und dann TableLayout.FILL)

Da das mit dem 50,TableLayout.FILL,40,... ja von der sun Seite ist (ist mir zwar komisch, was das genau machen soll, aber ich habs immer so wie ich es bei mir beschrieben habe und es geht einwandfrei!) muss es ja irgendwie gehn 

Guck auf der Seite nach, ist alles beschrieben!


----------



## joschika77 (30. Jun 2004)

Danke euch für die Antworten.
Muß ich die *.jar Datei einfach einbinden und dann in der Klasse package *.jar; eingeben damit er die kennt?
Ich arbeite mit Eclipse.Oder soll ich nur die *.class Dateien einbinden?

MfG


----------



## Isaac (30. Jun 2004)

Mein Lieblingslayout Manager ist der GridBagLayout. Er ist beim ersten mal zum Kotzen und ich hab ewig gebraucht bis ich wirklich alle Paramter begriffen und nutzen konnte. Aber wenn man es einmal verinnerlicht hat nutzt man "nie" wieder einen anderen. 

P.S: TableLayout kenne ich nicht, schau ich mir gleich mal an.


----------



## P3AC3MAK3R (30. Jun 2004)

Verschoben: AWT & Swing.


----------



## Isaac (30. Jun 2004)

Projekt anklicken (links in der Packageview) rechtsklick -> Properties -> Java Build Path -> Den Reiter Libraries -> Add external JARs und dann das Jar auswählen. Fertig


----------



## Guest (30. Jun 2004)

Wenn Du Die jar-Datei einbinden willst, kopierst Du sie einfach in folgendes Verzeichnis Deiner SDK-Installation:
*C:\jdk1.5.0\jre\lib\ext* Den SDK-Namen und den Pfad musst Du an Deine Installation anpassen.

Oder Du legst die Class-Dateien zu Deinen eigenen Klassen. Möglicherweise musst Du dann aber noch eine import-Anweisung schreiben. Ich kann es Dir nicht sagen, bisher habe ich das TableLayout auch noch nicht benutzt.


----------



## joschika77 (30. Jun 2004)

Jo das hat geklappt.
Ich sehe nur noch nicht durch mit den ganzen Parametern.
Wenn ich da die Buchstaben ändere geht gar nicht mehr.(c in t oder b usw.)
Ich versuche mich erstmal.
Danke nochmal

MfG


----------



## thE_29 (30. Jun 2004)

du musst beim 1.ten Param sagen wie die horizontale Ausrichtung ist

also c,l,r
l = left
r = right
und der 2te ist vertikale
also c,b,t
b = bottom
t = top


desweitern brauchst du nicht immer 6 parameter angeben
es geht auch

add(komponent,"1,1,c,c"); 

jetzt setzt er es auf die zelle und so groß wie sie halt ist, ist sie halt


----------



## joschika77 (2. Jul 2004)

Was genau bedeutet das Size eigentlich?


```
double [][]sizes = {{0.25,0.25,0.25,0.25} //Spalten 
                           ,{50, TableLayout.FILL, 40, 40, 40}}; //Reihen

Wird die Tabelle in 4 Viertel geteilt?

MfG
```


----------



## joschika77 (2. Jul 2004)

Ich meine wie bekomme ich z.B. eine TextArea größer?
Die ist immer so groß wie die Anzahl der Zeichen die sie enthält.
Also wenn nichts drinsteht ist sie auch nicht wiklich zu sehen.
Oder wie funktioniert das?So ein Raster wäre nicht schlecht.
Dann könnte man sehen wie groß die Zelle ist.

MfG


----------



## L-ectron-X (2. Jul 2004)

Nehmen wir mal an, Du würdest Dein TextArea in ein BorderLayout packen und mit _BorderLayout.CENTER_ in der Mitte positionieren, dann würde sich Dein TextArea an die Größe des Containers anpassen, in dem sie eingesetzt wurde. In diesem Fall bräuchtest Du z.B. keine Größe für den TextArea definieren, da das schon vom Layout übernommen wird.


----------



## thE_29 (2. Jul 2004)

post mal den ganzen Code, dann kann ich dir sagen wie es umschreiben sollst


----------



## joschika77 (2. Jul 2004)

Ich habe es jetzt so gemacht.


```
this.setSize(400,300);
		this.setTitle("Verbundene Clients: ");
		double [][]sizes = {{0.1,0.8,0.1} //Spalten 
			           ,{50, TableLayout.FILL, 10, 10, 10}}; //Reihen
        
        this.getContentPane().setLayout(new TableLayout(sizes));
        
        addWindowListener(this);
        
        
        JTextArea ta = new JTextArea("Hier sind Freizeichen damit die Area eine gestimmte Anfangsgröße  hat . Blöde Lösung                                                                                                                                     \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        ta.setForeground(Color.WHITE); 
  		ta.setBackground(Color.BLACK);
        
        JScrollPane jp = new JScrollPane(ta);
        jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        jp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        this.getContentPane().add(jp,"1,1,c,c");
```

MfG


----------



## thE_29 (2. Jul 2004)

> ```
> this.getContentPane().add(jp,"1,1,c,c");
> ```



mach das

```
this.getContentPane().add(jp,"1,1,2,2");//das 2 ist relativ, musst mi deiner Tabelle ansehen!
```

Du kannst entweder so angeben add(comp,"1,1,2,2,c,c"); // bei dem hier, zieht er es von 1,1 nach 2,2 aber centert es (dh er macht auch was mit der Größe!)
oder add(comp,"1,1,2,2"); // bei dem ziet er es dir von 1,1 nach 2,2 ohne zu centern oder sonst was!


----------

