# gridbag-layout mit swing



## biker126 (18. Mrz 2004)

hallöchen

hab ein problem mit dem gridbaglayout unter swing. das sieht ned so aus wie ich's gern hätte...

```
Container cp = getContentPane(); 
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc;
cp.setLayout(gbl);
```


```
JLabel search = new JLabel("Search in:");
gbc = makegbc(0, 0, 1, 1);
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.WEST;
gbl.setConstraints( search, gbc);
cp.add(search);

gbc = makegbc(0, 1, 1, 1);
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.WEST;
gbl.setConstraints(combo, gbc);
cp.add(new JScrollPane(combo));
		
JList list = new JList(files);
//list.addItemListener(new MyItemListener());
gbc = makegbc(0, 1, 5, 6);
gbc.fill = GridBagConstraints.BOTH;
gbc.anchor = GridBagConstraints.WEST;
gbl.setConstraints(list, gbc);
cp.add(new JScrollPane(list));
pack();
```


```
private GridBagConstraints makegbc(int x, int y, int width, int height)
{
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = x;
    gbc.gridy = y;
    gbc.gridwidth = width;
    gbc.gridheight = height;
    gbc.insets = new Insets(2, 2, 2, 2);
    return gbc;
}
```

so siehts aus:






eigentlich sollte das doch links oben in der ecke anfang und die liste sollte unter dem label und der combobox sein...
und die scrollbars fehlen aus bzw. sehen komisch aus. was is da nich gut?
mein LookAndFeel wähl ich so aus (falls es daran liegt):

```
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName() );
```
habs schon mit "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" probiert, das bringt nix (dann liegts wohl ned am LookAndFeel).

wär schön, wenn mir jmd weiterhelfen könnte!

gruss biker


----------



## Beni (18. Mrz 2004)

> gbc = makegbc(0, 1, 1, 1);
> [...]
> gbc = makegbc(0, 1, 5, 6);



Hm, zweimal dieselbe Position? versuch mal beim zweiten _makegbc( 0, 2, 1, 1 );_



> gbl.setConstraints(list, gbc);
> cp.add(new JScrollPane(list));


Wenn du ein JScrollPane machst, musst du auch die Constraints mit dem Scrollpane verknüpfen (und nicht seinem Inhalt).


----------



## biker126 (18. Mrz 2004)

hmm, das mit den x/y positionen hab ich ned gesehn. hat aber komischerweise auch nix geändert... 
die makegbc funktion wird sowieso völlig ignoriert. deswegen werden die komponenten auch einfach zentriert nebeneinander angeordnet... :/
wahrscheinlich stimmt was mit dem gbc/gbl zeugs ned... 

und wie verknüpf ich die Constraints mit dem JScrollPane?


----------



## Beni (18. Mrz 2004)

Verknüpfen: wie alle anderen Components:


```
JScrollPane pane = new JScrollPane( list );
gbc = ... // herstellen, Werte setzen, ...
gbl.setConstraints( pane, gbc );
cp.add( pane );
```

Apropos: Eine JScrollPane um eine ComboBox  ???:L  Das ist doch nicht notwendig?


----------



## lhein (18. Mrz 2004)

Doch, ist es meines Erachtens schon, denn die Liste ansich ist nicht scrollbar, wenn ich das richtig in Erinnerung habe.


Jedoch warum machst Du das so kompliziert über GridBagLayout ?
BorderLayout ist hier viel einfacher in meinen Augen.

Man nehme 1 Panel für die Combo und das Label. Packe FlowLayout oder BorderLayout auf dieses Panel und adde erst das Label, dann die Combo. (bei BorderLayout würde ich WEST und CENTER vorschlagen)
Nun packe man dieses Panel auf unser ContentPane mit BorderLayout.NORTH.
Man lege nun ein JScrollPane mit BorderLayout.CENTER auf das ContentPane und adde die Liste in die ScrollPane.

Fertig ist das ganze dann auch schon. Ein bischen Abstände mit HGap und VGap einstellen und dann sollte es ok sein.

Sucht nicht nach Layout - Lösungen, die immer nur ein LayoutManager verwenden, es sei denn ihr wollt es statisch als XYLayout haben. Bei dynamischen Layouts ist immer eine sinnvolle Kombination aus mehreren LayoutManagern gefragt.

Grüße
LR


----------



## Beni (18. Mrz 2004)

... und bei 50 ineinander verschachtelten Panels verschwendet man auch gar keine Ressourcen ... :roll:
... und ein GridBagLayout ist ja soooo unflexibel ... ???:L 

Ich verwende _nur_ GridBagLayout, und das funktioniert sehr sehr gut...

Darum, lieber biker, lass dich von LR, dem Ketzer, nicht irritieren  :wink: 

Gruss Beni 

P.S. Meine Frage bezog sich auf diese Zeile _cp.add(new JScrollPane(combo)); _. Combo != List .
P.P.S. bitte diesen Post nicht ernst nehmen.


----------



## Roar (18. Mrz 2004)

*lol* toll neue signatur 
also ich schwöre ja auf das TableLayout  :lol: 
das ist *toller, schöner, flexibler und einfacher*


----------



## lhein (18. Mrz 2004)

Beni hat gesagt.:
			
		

> ... und bei 50 ineinander verschachtelten Panels verschwendet man auch gar keine Ressourcen ... :roll:
> 
> ---> wenn Du da schon an Ressourcenverschwendung denkst, dann hör mit Java auf und mach C/C++, denn Java ist mit Verlaub ein Riesenressourcenverschwender   Kleines Beispiel...lade mal mit verboseGC eine 10 MB Datei in ein JTextArea. Release danach den Inhalt des Textareas und wirf bei Bedarf nen GC an. Dann mach das ganze noch einige Male und beobachte Mal Deinen Memoryverbrauch. Erstens wird nahezu 8mal soviel allociert wie die Datei gross ist und was nach schlimmer ist, es wird nicht mehr annähernd soviel freigegeben, selbst wenn man es von Hand macht. Out Of Memory ist da schon vorprogrammiert....soviel zum Thema Ressourcensparendes Java-Programmieren
> 
> ...


---> Keine Bange, wer austeilt muss auch einstecken können, oder?


----------



## biker126 (18. Mrz 2004)

oke, gridbaglayout is zwar kompilizierter als die anderen. aber mit den anderen konnt ich noch nie das layout hinkriegen, dass ich wollte. mit gridbag gings meist so einigermassen (auch ned immer 100%ig).

aber soweit ich informiert hab hat eine combobox standartmässig keine scrollbar. genau wie eine list auch ned (eine combobox is ja mehr oder weniger ne erweiterte liste bzw. combo aus liste und textfield. steht zumindest so im java-handbuch).

naja, ich werd das jetzt mal mit dem constraits probieren und falls es immer noch ned stimmt. nehm ich halt andere layoutmanager... *g*


----------



## Beni (18. Mrz 2004)

Hm, wenn's immer noch nicht funktioniert schreib ich's für dich. Schliesslich muss ich das GBL verteidigen


----------



## biker126 (18. Mrz 2004)

gesagt getan, mit gridbag sah's immer noch sch... aus. hab jetzt LR's variante genommen .

aber die scrollbar wird mir immer noch komisch (so wie im screenshot) angezeigt. jmd ne ahnung woran das liegt? ich hab zwar für xp einen anderen style als normal, aber man kann ich java ja auch default LookAndFeel bzw. default-win LookAndFeel nehmen. nur wie man sehen kann klappt da irgendwas nich..


----------



## lhein (19. Mrz 2004)

Und wieder hab ich jemanden von den Vorzügen von gemischten LayoutManagern überzeugt. Fein.

Zu deinem Problem mit den nice-looking Scrollbars kann ich Dir einen Tipp geben.
Wir hatten das Problem letztens auch bei einem Kundenrechner und haben festgestellt, dass dieser seinen XP Style ziemlich weit vom Standard abgewandelt hat. Versuche mal, deinen Theme auf das Standard XP blue oder gray zurückzustellen und schau Dir Dein Programm danach nochmal an. 
Kann mich aber nicht mehr dran erinnern, welche Farbsettings die Schuldigen waren.

Das DefaultLookAndFeel nutzen heisst nicht, dass man die Windows-Standard Themes verwendet, sonder er nimmt schon Deine Einstellungen vom Theme. Daher auch dieser Effekt.

Grüße
LR


----------



## biker126 (19. Mrz 2004)

ah soooo. und was ist, wenn ich diesen "defaultswingL&F" nehm? also den hässlichen grau/lila? könnts damit gehen? bzw. wie heisst der überhaupt? bzw. wo stehen diese ganzen standart-klassen namen??

noch zu den layoutmanagern. wie gesagt, bisher hatts mit gridbag immer besser geklappt als mit gemischten layouts. das war aber immer unter awt. warums jetzt unter swing nicht geht weiss ich immer noch nicht... (@beni: wenn du zeit hast, kannsts ja mal schreiben. wie's aussehen soll weisst ja glaubs ). naja, ich bin weder für noch gegen das eine oder andere. ich nehm einfach das, was funktioniert... .


----------



## lhein (19. Mrz 2004)

Das mit dem überzeugt war auch eher im Spass gemeint 
Jeder nimmt das mit dem er am besten kann 

Hast Du mal Deinen XP Style zurückgestellt auf den Standard Blue?

LR


----------



## bygones (19. Mrz 2004)

ich mixen die Layoutmanager auch immer - wobei das GBL schon mein Liebling ist  :roll: 
Man muss sich einfach dran gewöhnen, nicht aufgeben und irgendwann klappts dann auch beim ersten Mal  :wink:


----------



## biker126 (19. Mrz 2004)

wenn ich standart xp-style für win einstell, dann seh ich die scrollbar .

aber wie gesagt, ich muss ja nicht zwingend das "windows-style" unter swing nehmen. es gibt ja noch andere (metal oder wie die heissen). würde es damit gehen auch wenn ich kein standart xp-style für win verwende? falls ja, wie kann ich diese anderen "swing L&Fs" verwenden? (ich hoffe man versteht, was ich mein *g*)


----------



## lhein (19. Mrz 2004)

lass einfach die Zeile mit dem setSystemLookAndFeel weg, dann nimmt er standardmäßig glaub Metal L&F.

LR


----------



## bygones (19. Mrz 2004)

Außerdem - warum sollte man sich den Kopf über LayoutManager machen...

Wofür gibt es den GUI Editoren  :lol:  :roll:


----------



## Beni (19. Mrz 2004)

deathbyaclown hat gesagt.:
			
		

> Außerdem - warum sollte man sich den Kopf über LayoutManager machen...
> 
> Wofür gibt es den GUI Editoren  :lol:  :roll:



*Weil:* ...  nee, ich sag nix, das wird zu OT. Du kennst mich ja unterdessen  :wink:


----------



## biker126 (19. Mrz 2004)

wtf is ein GUI editor? was ein gui ist weiss ich. aber was kann der editor genau? is das so IDE mässiges klicki-klicki-bau-ich-mir-ein-gui ? *g*


----------



## lhein (19. Mrz 2004)

Genau das ist es. Hat nur den Nachteil, dass es mit eigenen Komponenten nicht so gut zusammenarbeitet.

LR


----------



## Roar (19. Mrz 2004)

und vor allem hat es zu folge dass es immer mehr kleine dumme kinder gibt die sich mit Kazaa per zufall JBuilder oder Delphi oder sowas runterladen, sich eine GUI zusammenklicken und dann glauben sie wären Programmierer  :evil:  :evil:  :evil: 

ahja und außerdem hat es zur folge, dass die Programmierer durch den müll total verweichlicht werden und mehr klicken müssen als zu schreiben. irgendwann können die nichtmale mehr 10-finger schreiben


----------



## biker126 (19. Mrz 2004)

so in etwa seh ich's auch. wenn ich schon am programmieren bin will ich wenigstens noch selber was eintippen... was zusammenklicken kann ja jeder Frontpage user... ^^


----------



## bygones (19. Mrz 2004)

biker126 hat gesagt.:
			
		

> so in etwa seh ich's auch. wenn ich schon am programmieren bin will ich wenigstens noch selber was eintippen... was zusammenklicken kann ja jeder Frontpage user... ^^


Ich verwende GUI Editoren nur um einen kleinen Vorblick zu bekommen - aber der produzierte Code ist meiner Ansicht nach nicht wirklich schön, daher nehm ich ihn dann nicht her.

Auch hier kann man wieder diskutieren a la IDE. Für Anfänger würde ich es auch raten, aber bei mir ist es als wenn ich HTML Seiten mach. Früher war natürlich Phase 5 angesagt, aber wenn man die Sprachkonstrukte kennt ist es langweilig und zeitkostens alles selber zu tippen..... dann nutze ich schon lieber GUI Editoren bzw. Dreamweaver oder so...


----------



## lhein (19. Mrz 2004)

Naja, ganz so schlimm seh ich das nicht.
RAD-Tools haben schon ihre Vorzüge. Ich benutze den Designer vom JBuilder auch wenn es geht, denn es spart einem ne Menge Tipparbeit. Aber die GUI erstellen ist ja nicht unbedingt eine große Herausforderung. Um die Programmfunktionalität drehts sich ja, da liegt die Herausforderung.

LR


----------



## bygones (19. Mrz 2004)

LR hat gesagt.:
			
		

> Aber die GUI erstellen ist ja nicht unbedingt eine große Herausforderung. Um die Programmfunktionalität drehts sich ja, da liegt die Herausforderung.


Genau !! Bzw. meist ist sie nur secondär relevant !


----------



## Beni (19. Mrz 2004)

LR hat gesagt.:
			
		

> Aber die GUI erstellen ist ja nicht unbedingt eine große Herausforderung. Um die Programmfunktionalität drehts sich ja, da liegt die Herausforderung.


Moment mal. Wenn deine GUI aus zwei Button und einem Dialog besteht, hast du natürlich recht.

Aber wenn du Menüs machst, die bei einem Rechtsklick öffnen, DnD, sortierte JTables, dynamische JTrees, deren Nodes man umbenennen kann, ...
Dann würde ich die GUI nicht mehr "trivial" nennen. Und alle diese tollen GUI-Editoren nützen dann einen Quatsch, weil sie nur klick-klick können.

mfg Beni  :evil:


----------



## bygones (19. Mrz 2004)

Ich weiß nicht wie LR es meinte, aber aus meiner Sicht hast mich / uns falsch verstanden.

Es gibt einen Unterschied zwischen Interaktionen bzw. Funktionalität der Komponenten und anordnen der Komponenten !

D.h. um eine Komponenten irgendwo hinzusetzen (z.B. JTree) brauchst du nicht viel Können - da nehm ich den Editor.
Was für Aktionen bzw. welche Funktionalität die Komponenten hat, das kann natürlich kein GUI Editor, gehört meiner Meinung nach auch zur Controll Ebene ! Das muss man dann selber proggen !! 

Aber um seine Sachen zu ordnen und zu arrangieren ist der Editor gut !!


----------



## Beni (19. Mrz 2004)

Dann hab ich euch falsch verstanden.

Ich verstand GUI als Sammelbegriff (und solche Interaktionen daher als Teil der GUI).

mfg Beni

P.S. Andererseits habe ich gerade einen Bug gefunden (6h Suchzeit), Vorzeichenfehler, und bin jetzt für alles offen.


----------



## bygones (19. Mrz 2004)

:wink: 
Aber das wäre doch mal n Editor - der auch die ganzen Interaktionen beherrscht .....


----------



## biker126 (19. Mrz 2004)

tippst ein was das proggram können soll und er generiert dir den fertigen code... ^^


----------



## Beni (19. Mrz 2004)

Es soll Leute geben die sich wundern, wieso sie schöne Buttons haben, aber nichts passiert, wenn sie draufdrücken...

Du kannst im Forum suchen, wieviele denken, der FileChooser speichere ihnen gleich die Datei (so ganz automatisch, ohne dass man ihm irgendwelche Daten geben müsste).

P.S. das ist kein Witz  :roll:


----------



## Roar (19. Mrz 2004)

tja schon schlimm...
und @Beni: ohhh 6h nach nem fehler suchen? da war dein *debugger* aber langsam. 
btw: das is mal ne gute idee für nen contest: wenn ich meinen fehler partout nicht finde, dann geb ichs euch als aufgabe


----------



## Beni (19. Mrz 2004)

Diesmal wars ein _println_ das mich auf die richtige Spur gebracht hat.
Man muss _alle_ Mittel ausprobieren, die man hat.


----------



## Roar (19. Mrz 2004)

AHA sieh mal an... ein paar
System.out.println("OK"); und man hats... musste ich heute auch schon machen


----------



## lhein (19. Mrz 2004)

Ah, deathbyaclown hat mich korrekt verstanden 
Sorry wenn meine Schreibweise das nicht hat sofort klarwerden lassen.

Mit gings wirklich nur um das reine Anordnen der Komponenten.

Was das "debuggen" ala System.out angeht, das ist ne sehr nützliche Sache  Brauchs eigentlich nahezu jeden Tag 

Das mit dem JFileChooser ist witzig. Glaube ich weiss welchen Post Du damit meinst 


Grüße
LR


----------



## schalentier (19. Mrz 2004)

ich kann nur jgoodies empfehlen. Dort gibts gleich mehrere LayoutManager, so auch z.b das FormLayout, welches ich von allen bisher genannten am besten finde (basiert auf dem tablelayout, ist aber einfacher (fuer mich jedenfalls)).

ach und um noch was zur ot diskussion beizusteuern:
sind doch immer wieder die gleichen leute, die von vornherein alles was sie nicht kennen in einen topf schmeissen und als mist abstempeln. (siehe: ot ueber ides)

die logik: 

gui editor von programm xyz ist mist, ALLE gui builder sind sinnlos und nur fuer noobs/kiddies. die echten coder machen alles von hand..

find ich ziemlich naiv. (ist meiner meinung nach, exakt das gleiche, wie die endlose diskussion von linuxern die windowsleuten vorwerfen, dass sie unfaehig sind und windows nur klickibunti (scheisswort) ist. leider vergessen alle beide gruppen immer, die vorteile des anderen zu nennen, oder sie sind unfaehig diese zu erkennen)

im fall von gui editoren ist das nun mal, dass es viel schneller geht, wenn ich irgendwelche dialoge zusammenklicke, anstatt mich stundenlang mit GBL rumzuschlagen. ich denke, es ist moeglich einen gui editor so einfach zu gestalten, dass sogar der noobishe endbenutzer einer software damit umgehen kann (siehe access).

klar wird durch einen editor an flexibilitaet verloren, das ist logisch. gleichzeitig gewinnt man aber zeit, da man entweder selbst schneller mit der arbeit fertig ist, oder man arbeit an weniger erfahrene leute (oder sogar an den kunden) weiterleiten kann. und letztenendes ist zeit einfach viel wertvoller, als eine total genial/flexible/schicke loesung mit GBL.

ich find den gui editor vom jbuilder auch dreck, weil der mich zu sehr einschraenkt. aber ich kenn auch nen gui designer, der _nur_ layoutet und saemtliche logik und fieldbindings aussen vor laesst. ich kann damit einfach nur mein jtextfield an die stelle schieben wo ich es haben will. bzw die Layout-Constraints setzen und gleichzeitig sehen, wie das dann aussieht. warum sollte man das nicht nutzen? am ende sieht dieser code genauso aus wie die von hand geschriebene loesung. 

aber egal, jedem das seine...

ps: ich arbeite unter windows und nutze einen gui designer.
bin ich jetzt ein noob?


----------



## Beni (19. Mrz 2004)

Ich hab ja ein bisschen nachgedacht, bevor ich diese Antwort geschrieben habe... (also: das ist keine judihuii-Beschimpf-Aktion)

Punkt 1: alle meine Bemerkungen sind für Leute gedacht, die _aus Spass_ coden, und nicht weil sie Geld für möglichst viel Code (bzw. Buttons) in möglichst kurzer Zeit kriegen. 

Punkt 2: es ist so, dass ich mich schnell in eine Meinung verrenne, aber meine Vorurteile kommen nicht einfach aus dem Niergendwo :? 

Punkt 3: Du sagst: mit einem Editor kann ich Zeit sparen.
Hier möchte ich (vehement) widersprechen:
- "Von Hand" benötigst du etwa 5 Zeilen Code um einen Button herzustellen und schön einzubinden (Vielleicht mehr, wenn du noch irgendwelche Icons setzen willst...).
Per Editor benötigst du etwa 5 Klicks, und noch ein oder zwei Zahleneingaben.

Wenn man mit den Editor geübt ist, ist man schnell, ohne Zweifel.
Wenn man die API auswendig kennt (was nach 10maligem Benutzen geschehen ist :###), ist man auch per Hand schnell, sehr schnell.

Geschwindigkeit ist nicht das durchschlagende Argument.


- Vorteil des Editors: Man sieht was man macht.
Nachteil "von Hand": man ist _blind_ (und kann dabei durchaus auf die Nase fallen). 

- Nachteil des Editors: Ausser den Standartkomponenten, und anderen _vorbereiteten_ Komponenten kann man nichts benutzen.
Vorteil "von Hand": Man kann eigene Komponenten einsetzen, ohne Beans zu schreiben, oder dem Editor in einer langen Diskussion beizubringen, dass man etwas eigenes hat.



> und letztenendes ist zeit einfach viel wertvoller, als eine total genial/flexible/schicke loesung mit GBL.


Hier haben ich eine andere Philosophie, und deshalb kann es nur Streit geben :wink:

Aber denk mal über etwas nach: Die Zeit die die Programmierer ins coden investiert ist wesentlich kürzer als die Zeit, die die User (evtl. inkl. des Coders)  investieren. Es geht dabei um die Gesammtsumme (also alle User zusammen).
Wenn du mit einem praktischen Layout ein paar Sekunden Arbeitszeit für den User gewinnst, macht sich das in der Summe bemerkbar.

Und das Image dass du gewinnst, kann man nicht mit Gold aufwiegen. 

Auch den Lerneffekt will ich noch erwähnen. Wenn du einmal eine preisverdächtige GUI geschrieben hast, kannst du die zweite GUI innerhalb eines viertels der Zeit schreiben.
Es ist eine enorm gute Übung, und man versteht danach, was die Java-Progger gedacht haben.

Aus all diesen Gründen sehe ich den Unterschied zwischen GUI-Editoren und Code ähnlich wie von Excel und Programmieren... :wink:

herzliche Grüsse Beni, der gerne OT schreibt, und sich gerne streitet


----------

