# Formular in GridLayout ?



## martinator (30. Mrz 2011)

Hallo zusammen,

ich bin etwas am Verzweifeln mit den Layout Managern.

Ich möchte innerhalb eines JPanels ein Formular darstellen (2 Spalten, beliebig viele Zeilen)

Nun habe ich gedacht, ich kann das doch ganz Geschickt per GridLayout Lösen.

Allerdings stört mich extrem, dass das Formular sich immer in Y-Richtung abhängig von der Anzahl der Zeilen "streckt"
(mit Gridlayout(0,2))

Wenn ich eine feste anzahl von Zeilen eingebe, erhalte ich zwar eine angenehme Zeilenhöhe, er benutzt jedoch nurnoch 1 Spalte.


Außerdem hätte ich gerne links und rechts vom Formular einen kleinen Abstand, weiß jemand wie ich soetwas bewerkstelligen kann?



Vielen Dank


----------



## André Uhres (30. Mrz 2011)

martinator hat gesagt.:


> Wenn ich eine feste anzahl von Zeilen eingebe, erhalte ich zwar eine angenehme Zeilenhöhe, er benutzt jedoch nurnoch 1 Spalte.
> 
> Außerdem hätte ich gerne links und rechts vom Formular einen kleinen Abstand, weiß jemand wie ich soetwas bewerkstelligen kann?



Hallo Martinator,

beim GridLayout mit fester Zeilenzahl wird die zweite Spalte erst angefangen, wenn die erste voll ist. Einen Abstand vom Rand bekommen wir, indem wir einen EmptyBorder beim JPanel setzen.

Gruß,
André


----------



## Dit_ (30. Mrz 2011)

Oder benutze TableLayout


----------



## andiv (30. Mrz 2011)

Am Besten geeignet wäre das FormLayout von JGoodies. Damit bekommt man mit wenig Aufwand recht hübsche Formulare. Sehr empfehlenswert!


----------



## Camino (30. Mrz 2011)

Wenn man sich ein bisschen mit GridBagLayout beschäftigt, bekommt man das auch damit problemlos und schick hin. Ist eigentlich garnicht so schwer oder kompliziert, wie oft behauptet wird oder wie es einem am Anfang erscheint. Ich hab in meiner Anwendung auch mehrere (zum Teil ziemlich umfangreiche und verschachtelte) Formulare. Hab mir einfach selbst eine Klasse FormularPanel gebaut, welche die Komponenten im GridBagLayout anordnet. Dann brauche ich nur noch so ein Panel erstellen und die Komponenten hinzufügen. Dieses FormularPanel hat sich so nach und nach weiter entwickelt, ist bestimmt noch nicht perfekt oder komplett. Aber ich werde das einfach noch weiter ausbauen. Letztlich komme ich dann wohl auch zu einem ähnlichen Ergebnis, wie TableLayout oder FormLayout. Und man lernt dabei ganz gut die Funktion und das Verhalten von GridBagLayout.

Gruss
Camino


----------



## andiv (30. Mrz 2011)

@Camino: Natürlich geht es mit GridBagLayout auch (finde es auch gar nicht so schwer, aber der Code ist hässlich und lang). Vielleicht geht es sogar allein mit verschachtelten BorderLayouts. Entscheidend ist aber: Wie lang ist der benötigte Code für das Layout? Wie gut ist der Code wartbar? Lassen sich auch kompliziertere Formulare (z.B. viele Elemente die sich über mehrere Spalten erstrecken) noch einfach umsetzen? Und an dieser Stelle ist das FormLayout einfach kaum zu schlagen.


----------



## Camino (30. Mrz 2011)

Na ja, als ich angefangen habe, mich mit dem GridBagLayout zu beschäftigen, musste ich auch erst mal nachschauen, wie das funktioniert, und fand es erstmal nicht so einfach. Das hat sich aber mit der Zeit geändert. Zu Beginn hatte ich irgendwo mal ein Beispiel gefunden, bei dem jemand eine Methode erstellt hatte, welche die Komponenten zum GridBagLayout hinzufügt. So hatte ich mir also überall, wo ich ein Formular brauchte, ein JPanel mit GBL erstellt, die Methode hinzugefügt und dann die erstellten Komponenten mit dieser add-Methode zum GridBagLayout hinzugefügt. Später, als ich feststellte, dass ich an mehreren Stellen in der Anwendung Formulare brauchte, hab ich mir das dann in eine eigenen Klasse ausgelagert.

Mein FormularPanel, also die Klasse, welche die Formulare (mit GridBagLayout) zusammenstellt, hat nur knapp über 80 Zeilen. Wie gesagt, ist bestimmt noch ausbaubar und kann verbessert werden. Dann erstelle ich mein Formular und füge die Komponenten hinzu. Alles eigentlich auch nicht gerade sehr lang und unübersichtlich.

z.B.:

```
JLabel label1 =  new JLabel();

FormularPanel form = new FormularPanel();
form.add( label1,  0,  0, 3, 1, 0.0, 0.0, 2, 17, FormularPanel.INSETS_LABEL );

// Methode add(Component, gridx, gridy, gridwidth, gridheight, weightx, weighty, fill, anchor, insets)
// übergibt die Werte für das GridBagLayout
```


----------



## Gast2 (30. Mrz 2011)

Kann auch nur JGoodies FormLayout empfehlen


----------



## André Uhres (31. Mrz 2011)

Ich geh mal davon aus, dass Martinator gerade erst damit anfängt, sich in die Layoutmanager einzuarbeiten. Von daher ist es meiner Meinung nach nicht besonders sinnvoll, ihn jetzt schon mit Sachen zu konfrontieren, die anscheinend über sein Ziel hinausgehen.

Gruß,
André


----------



## Gast2 (31. Mrz 2011)

André Uhres hat gesagt.:


> Ich geh mal davon aus, dass Martinator gerade erst damit anfängt, sich in die Layoutmanager einzuarbeiten. Von daher ist es meiner Meinung nach nicht besonders sinnvoll, ihn jetzt schon mit Sachen zu konfrontieren, die anscheinend über sein Ziel hinausgehen.
> 
> Gruß,
> André



Das FormLayout ist einfach und verständlich. Wenn es einmal benutzt, benutzt man nichts anderes mehr in Swing, außer bei einfachen Sachen das Box- und Borderlayout


----------



## L-ectron-X (31. Mrz 2011)

SirWayne hat gesagt.:


> Wenn es einmal benutzt, benutzt man nichts anderes mehr in Swing...


Damit projezierst du aber nur deine Meinung. Es spricht nichts gegen die Verwendung der Standard-LMs.


----------



## Gast2 (31. Mrz 2011)

L-ectron-X hat gesagt.:


> Damit projezierst du aber nur deine Meinung. Es spricht nichts gegen die Verwendung der Standard-LMs.



Und was genau ist schlimm daran?
Klar spricht was dagegen das GridBagLayout ist umständlich,veraltet und schwer wartbar.
Für das FormLayout spricht, dass es einen programatischen GUI-Bilder gibt und alles schön übersichtlich bleibt.


----------



## L-ectron-X (31. Mrz 2011)

SirWayne hat gesagt.:


> Und was genau ist schlimm daran?


Nichts... Nur würde ich nicht jedes Layout mit GridBagLayout lösen, genauso wenig, wie das FormLayout überall Sinn macht.



SirWayne hat gesagt.:


> das GridBagLayout ist umständlich,veraltet und schwer wartbar.


Es ist sicher nicht trivial, aber meistens wird dieses Argument von Leuten ins Feld geführt, die das GridBagLayout nicht verstanden haben.

Wenn es dir vorrangig darum geht, einen schwierigen LM per Mausklick zu benutzen, findest du in Netbeans Matisse ein sehr mächtiges Werkzeug, das auch das GridBagLayout zu einem Kinderspiel macht.


----------



## Gast2 (31. Mrz 2011)

L-ectron-X hat gesagt.:


> Nichts... Nur würde ich nicht jedes Layout mit GridBagLayout lösen, genauso wenig, wie das FormLayout überall Sinn macht.



Das sag ich ja mit den obigen 3 LM's die ich genannt habe evtl. noch TableLayout kannst du alles abbilden, was man benötigt.



L-ectron-X hat gesagt.:


> Es ist sicher nicht trivial, aber meistens wird dieses Argument von Leuten ins Feld geführt, die das GridBagLayout nicht verstanden haben.



Ich verstehe das GridBagLayout und finde es nicht gut und verwende es auch nirgends!!!



L-ectron-X hat gesagt.:


> Wenn es dir vorrangig darum geht, einen schwierigen LM per Mausklick zu benutzen, findest du in Netbeans Matisse ein sehr mächtiges Werkzeug, das auch das GridBagLayout zu einem Kinderspiel macht.



Ich würde (außer für einen Prototypen) nie eine GUI zusammenklicken. Da hast du mich falsch verstanden, ich sagte programmtischen GUI-Builder. Du hast einen GUI Builder den du programmatisch verwenden kannt. Sehr schönes Konzept.


----------



## André Uhres (31. Mrz 2011)

SirWayne hat gesagt.:


> Das FormLayout ... benutzt man ... außer bei einfachen Sachen



Eben  .

Gruß,
André


----------



## Gast2 (31. Mrz 2011)

André Uhres hat gesagt.:


> Eben  .
> 
> Gruß,
> André



Total aus dem Zusammenhang gegriffen arbeitest du bei der Bild Zeitung


----------



## André Uhres (31. Mrz 2011)

SirWayne hat gesagt.:


> Total aus dem Zusammenhang gegriffen



Ist es nicht. Nur in einen erweiterten Zusammenhang gestellt, da du ja auf drei Layoutmanager beschränkt bist  .

Gruß,
André


----------



## Gast2 (1. Apr 2011)

André Uhres hat gesagt.:


> Ist es nicht. Nur in einen erweiterten Zusammenhang gestellt, da du ja auf drei Layoutmanager beschränkt bist  .
> 
> Gruß,
> André



Wenn de meinsch


----------

