# GUI-Programmierung - GUI-Builder oder eigenständig?



## Markus N. (7. Jul 2012)

Hallo liebes Java-Forum,

ich habe bisher privat in C++ programmiert und beschränkte mich, trotz fortgeschrittener Kenntnisse, zumeist auf die Konsolenprogrammierung. Ernsthafte größere Projekte hatte ich also nie begonnen.

Nun plane ich aus berufstechnischen sowie wissenstechnischen Gründen die Programmiersprache Java zu "erlernen" bzw. mich einzuarbeiten. Für zukünftige Projekte möchte ich gerne auf grafische Benutzeroberflächen setzen. Hierbei stellt sich mir aber nun eine Frage.

Sollte ich mir bei der Programmierung von Software auf Basis grafischer Benutzeroberflächen sogenannte "GUI-Builder" zur Hilfe nehmen oder mich ausschließlich auf komplett eigenständig programmierte GUI's beschränken? So gäbe es den Weg, die GUI selbst über den Builder zusammenzuklicken und die Logik sowie Funktionalität zu implementieren ( ich weiß, dass das auschließliche Zusammenklicken kein Programmieren ist ) oder gar alles selbst programmieren ( BorderLayout, GridLayout ... ) .

Wie wird soetwas vorallem in der profesionellen Programmierung gehandhabt? 

Ich bedanke mich und wünsche noch einen schönen Tag!

Liebe Grüße,


----------



## Marco13 (7. Jul 2012)

Von "professioneller Programmierung" hab' ich keine Ahnung, aber ... diese GUI-Builder haben mehrere Nachteile: 1. Der Code, den sie generieren, ist meistens unlesbar, 2. Man versteht den Code nicht (insbesondere, wenn man nicht schon oft vorher was ähnliches per Hand gebaut hat), 3. Es gibt immer wieder spezielle Dinge, die NICHT vom GUI-Builder abgedeckt werden.

Es gibt sicher Fälle, wo ein GUI-Builder OK ist: Wenn man 20 Eingabemasken nach Schema F zusammenfrickeln muss, und man die Applikation möglichst schnell und einfach auf den Bildschirm bringen muss. Für alles andere: 
Java how to [ComponentName] 
in eine Suchmaschine eintippen, z.B. 
java how to jbutton
-> How to Use Buttons, Check Boxes, and Radio Buttons (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)


----------



## Ullenboom (7. Jul 2012)

Etwas vereinfacht gesagt: Ich würde immer einen Gui-Builder einsetzen. Den Code schaut man sich nicht an, der ist nur generiert, weil Java keine Ressourcen-Dateien nutzen kann, so was wie XAML. Erst bei JavaFX gibt es einen deklarativen Weg. Logik kommt nach dem MVP-Pattern sowieso nicht in die View-Implementierung.


----------



## Cola_Colin (7. Jul 2012)

Markus N. hat gesagt.:


> Wie wird soetwas vorallem in der profesionellen Programmierung gehandhabt?



Bei der Firma in der ich eine Ausbildung mache, wird alles händisch geschrieben, zumeist mit JGoodies FormLayout | JGoodies 
Nach ein wenig Einarbeitung will man von GUI-Buildern auch gar nichts mehr wissen, imho


----------



## njans (7. Jul 2012)

Ebenfalls ein Nachteil von GUI Buildern ist, dass du den Code meist nicht verändern kannst, ohne dass dann der GUI-Builder diesen Code nicht mehr lesen kann und als Konsequenz nutzlos wird.


----------



## Schandro (7. Jul 2012)

Auf keinen Fall solltest du GUI-Builder benutzen. Schreib alles per Hand, ist viel besser.


----------



## vanny (7. Jul 2012)

Schliesse mich an, GUI-Builder = Müll, selbst die guten


----------



## Fab1 (7. Jul 2012)

Vor paar Monaten gab es bereits mal einen Thread hierzu und die Lösung war ganz einfach. 

Ähnlich wie bei Programmiersprachen gibt es keine Perfekte. So ist es auch bei diesem Thema es gibt Vorteile und Nachteile, aber keine richtige Lösung. Man muss abwägen und anschließend entscheiden.


----------



## Guest2 (7. Jul 2012)

Moin,

ich verwende für gewöhnlich den WindowBuilder von Eclipse/Google. Der daraus resultierende Code ist 

1. (fast) so wie ich ihn schreiben würde.
2. Ich kann den Code manipulieren und trotzdem kommt der Builder damit zurecht.
3. Per optionalem data binding kann UI und Model verbunden / generiert werden. (JSR 295)
4. Zu einem gegebenen Bean eine UI zu bauen ist zeitraubend. Wozu ne Stunde schreiben, wenn (fast) derselbe Code auch per Wizard erstellt werden kann. (Beispiel z.B. hier.)

Nichtsdestotrotz sollte man imho den Code auch von Hand schreiben können.

Viele Grüße,
Fancy


----------



## bERt0r (7. Jul 2012)

Auf keinen Fall solltest du als Anfänger GUI-Builder benutzen. Was du per Hand nicht bauen kannst, wird dir auch mit dem GUI Builder nicht gelingen, zumindest nicht ordentlich. Aus Erfahrung weiß ich, da kommt dann irgendein Code raus, der schelcht wartbar ist und früher oder später bockt und dann geht nix mehr und der Kollege/das Java Fourm kann den Fehler finden.


----------



## Cola_Colin (7. Jul 2012)

Also ich würde eher sagen, dass man gerade als Anfänger auch zunächst mal mit GUI-Builder arbeiten kann, weil es einem zunächst mal ne Menge Sachen abnimmt, die man dann nach und nach lernen kann. Aber der bessere Code und die schönere GUI kommt ganz klar bei handgeschriebenem Code raus.


----------



## bERt0r (8. Jul 2012)

Da widerspreche ich dir mal deutlich. Wenn du kochen lernen willst, beginnst du auch nicht damit scharenweise fertigpizzas zu backen. Das hilft dir nämlich null und lernt dir nur falsche Sachen ein.
edit: btw. ich liebe Analogien


----------



## Gast2 (8. Jul 2012)

Moin,

faszinierend wieviele hier auf GUI-Builder rumhacken. Tastsache ist das ich mit Qt schneller eine GUI zusammen gefrickelt habe als mit Java. Abgesehen davon hat im GUI-Code Programm-Code nichts zu suchen. Alle die hier rummeckern scheinen sich nicht dran zu halten 

Im Grund müsste ein GUI-Builder die entsprechenden Methoden (Click-Events, Scroll-Events etc.) als virtuelle Methoden anlegen und anschließend kann man erben und die Controlerlogik reinhauen, wobei das nicht wirklich getrennt ist. Eher müsste der GUI-Builder entsprechende Listner bereitstellen.

hand, mogel


----------



## Gast2 (8. Jul 2012)

Wie bei jedem Code der generiert wird, müssten auch "gute" GUI-Builder GenerationGap unterstützen.


----------



## bERt0r (8. Jul 2012)

GUI Builder sind super, aber man muss eben wissen was man da zusammenklickt, wenn man sie benutzt. Sonst weiß man doch nicht einmal, welche Art von Listener man für eine gewisse Sache benötigt.


----------



## Cola_Colin (8. Jul 2012)

bERt0r hat gesagt.:


> Da widerspreche ich dir mal deutlich. Wenn du kochen lernen willst, beginnst du auch nicht damit scharenweise fertigpizzas zu backen. Das hilft dir nämlich null und lernt dir nur falsche Sachen ein.
> edit: btw. ich liebe Analogien



Ich kann da nur von meinem eigenen Lernweg sprechen, der sah so aus, dass ich zunächst mit der Entwicklung von GUIs total überfordert gewesen wäre. Der Guibuilder von Netbeans kam da gerade recht. Ein bisschen was zusammengeklickt und dabei die verschiedenen Swing-Komponenten kennen gelernt-welcher Listener für was inklusive, den Code des Builders habe ich mir in Teilen ja durchaus angeschaut-, super sache. Klar war der Code murks und Trennung von GUI-Code und Logik war kaum gegeben. Aber es hat mir ermöglich zunächst mal die Komponenten kennen zu lernen.

Wenn ich Kochen lernen will, dann ist es vielleicht keine schlechte Idee zunächst eine Fertigpizza in den Ofen zu schieben, einfach nur um zu schauen, wie der Ofen funktioniert und wie eine Pizza überhaupt aussieht. 



mogel hat gesagt.:


> Abgesehen davon hat im GUI-Code Programm-Code nichts zu suchen. Alle die hier rummeckern scheinen sich nicht dran zu halten



Wieso ist das nur mit Gui-Buildern möglich?


----------



## bERt0r (8. Jul 2012)

Also wenn du mit dem GUI Builder den korrekten Umgang mit Swing Komponenten gelernt hast bist du glaub ich eher eine Ausnahmeerscheinung. Normalerweise sieht das dann eher so aus: http://www.java-forum.org/awt-swing-swt/138595-non-static-variablen-benutzen.html Ich will plammy hier nix unterstellen, weiß aber dass Anfänger durch GUI Builder ähnlichen Code erzeugen und dann eine Menge Zeit damit verschwenden, diesen Code zu korrigieren - weil irgendwo hakts dann immer.


----------

