# Grafische Oberflächen mit Java - GUI Builder oder von Hand?



## Ghuy (8. Jul 2011)

Hi,

ich hab des öfteren mit AWT und Swing Oberflächen zusammen gebastelt, ohne Editor, sondern direkt im Source-Code. 
Ich bin bei weitem kein Programmier-Gott, aber ich hab durch die zig-tausend Elemente irgendwann die Sachen nicht mehr gepflegt bekommen, weil eine kleine Änderung extrem viel Änderungen nach sich zog, weil alles angefasst werden musste (oder vieles)

Programmiert man überhaupt noch guis per Hand? Oder lieber mit gui-editoren und "mausklickerer" - falls ja, welchen Editor sollte man nehmen?

Wie erstellt man am besten GUIs?


----------



## Firephoenix (8. Jul 2011)

Hi,
ein Thema und X Antworten.

Zuerst einmal zu den Gui-Editoren:
Ich denke da werden andere auch noch genauer drauf antworten können, grob gesagt kann man mit den meisten von diesen Tool recht schnell brauchbare Oberflächen zusammenklicken, kriegt dannach aber ab und an Probleme wenn man im Code etwas ändern will.

Dann zum selbst Programmieren:
Ich denke auch hier sollte man wieder unterscheiden was genau man haben will.
Meistens kommt man mit dem Border und dem Gridlayout gut hin, ab und an auch mit dem Flowlayout und dem Nullayout.

Will man z.b. ein Panel, das in der Mitte irgendwas zeichnen soll, oben noch paar Knöpfe bietet und links vielleicht ein kleines Menü, kann man dem einfach ein BorderLayout verpassen, in den North für die Knöpfe steckt man ein Panel mit GridLayout und für das Menü an der Seite vielleicht noch ein Border oder ein Grid.
Damit erreicht man mit 1-2 Schachtelungen schon recht brauchbare Gui-Ergebnisse die in den meisten Standard-Fällen hinlangen ohne x Zeilen Code zu verbraten.
Manchmal reicht das aber nicht mehr und die Layouts müssen flexibler gestaltet werden, so sollen z.B. irgendwelche Komponenten genauer auf die Größe von anderen Reagieren und dabei vielleicht sogar noch verschiedene Seitenverhältnisse beibehalten.
An dieser Stelle könnte man auf das GridBagLayout zurückgreifen, mit dem man bei sowas recht gute Ergebnisse erzielen kann - arbeitet man zum ersten Mal damit kann man sich auf ein paar Stunden Tutorials und Frust freuen weil die Oberfläche absolut nicht das macht was sie soll - aber auch zu dem Ding findet man hier gute Tutorials und mit etwas Einarbeiten kann man damit auch gut arbeiten.
Die letzte Möglichkeit wäre noch die Gui zum Großteil selbst zu zeichnen, was vorrangig bei grafisch aufwändigeren Applikationen verwendet werden sollte (Bei Spieleclients z.b. findet man im Menü fast nie JButtons o.ä., dort werden meistens eigene Grafiken, evtl sogar mit Effekten verwendet).

Zeig doch einfach mal her was du machen willst (evtl ne kleine Skizze mit Paint) und was du bereits hast, dann können wir dir sicher weiterhelfen.
Gruß


----------



## Kr0e (8. Jul 2011)

Nun, also vlt sieht man keinen "normalen" JBUtton ... Aber man kann ja z.B. beim Button die Option setContentAreaFilled(false) nutzen und schon hat man nicht diesen langweiligen Standard-Grau-Hintergrund. Die Bilder werden AFAIK dennoch angezeigt, was auch ziemlich hübsch ist... Dann noch einen Font wählen, der zum spiel past... Generell bietet einem Swing schon derat viele Möglichkeiten... 

Kurz zu den Editoren: Ich denke auch, dass keine professionelle Software ohne einen Editor erstellt... Es gibt viele gute bis mittelgute kostenlose Editoren... IMHO ist der beste & kostenlose "Matisse GUI Builder", welcher bei Netbeans direkt eingebaut ist. Für Eclipse gibts ein paar kostenlose, die sind aber Murks, wie ich finde und ein paar richtig gute, kommerzielle Produkte... 

Von Hand würd ich nichts mehr machen... Zeit ist Geld


----------



## Marcinek (8. Jul 2011)

http://www.java-forum.org/awt-swing-swt/106865-macht-besten-gui.html


----------



## Tomate_Salat (8. Jul 2011)

Swing und AWT nicht mischen. Wieso? Schau hier ins FAQ da ist ein Beitrag dazu.




Kr0e hat gesagt.:


> ist. Für Eclipse gibts ein paar kostenlose, die sind aber Murks, wie ich finde und ein paar richtig gute, kommerzielle Produkte...


schon lange nicht mehr. Der WindowBuilder Pro ist mit abstand besser als der von Netbeans+dank Google kostenlos verfügbar.


----------



## Ebenius (8. Jul 2011)

Ich baue Swing immer von Hand.

Ebenius


----------



## Kr0e (8. Jul 2011)

@Tomate_Salat:

Hast Recht, wusste nicht, dass sich auf dem Sektor inzwischen was getan hat... Aber "mit Abstand besser" halt ich für Übertrieben.


----------



## Landei (8. Jul 2011)

Ebenius hat gesagt.:


> Ich baue Swing immer von Hand.



Dito.


----------



## Kr0e (8. Jul 2011)

Auch bei größeren GUI Projekten ? Da geht aber ne Menge Zeit drauf...


----------



## Ebenius (8. Jul 2011)

Ja, ich entwickle beruflich Java und schreibe hauptsächlich (ca. 60% der Arbeitszeit) Swing-GUIs. Sobald man ins Detail geht und komplexere GUIs in Teilen wieder verwenden will, kommt man schnell mit GUI-Buildern an deren Grenzen (nur meine Meinung). Je größer die GUI um so weniger will ich einen GUI-Builder.

Wie viel Zeit drauf geht, hängt doch in der Regel nicht von dem Anordnen einiger Buttons oder dem erzeugen einzelner Event-Methoden ab. Der Hauptaufwand steckt doch im Zusammenspiel der Komponenten mit ihren Modellen und das kann Dir kein GUI-Builder abnehmen.

Ebenius


----------



## Tomate_Salat (8. Jul 2011)

Kr0e hat gesagt.:


> Hast Recht, wusste nicht, dass sich auf dem Sektor inzwischen was getan hat... Aber "mit Abstand besser" halt ich für Übertrieben.



ich kenne beide. Meiner Meinung nach ist er es. Er produziert lesbareren Code, ist flexibler, unterstützt mehr Frameworks, kommt mit manuellen Änderungen klar und liefert von sich aus einige Bibliotheken mit + bindet sie bei bedarf ein. Ob der Netbeans-Editor Databinding kennt, weiß ich nicht, aber das kann WB-Pro auch.

Ich habe vorher auch mit dem Netbeans-Editor gearbeitet. Fand ich bis dato auch am besten, naja bis ich eben WB-Pro gesehen habe.




Ebenius hat gesagt.:


> Der Hauptaufwand steckt doch im Zusammenspiel der Komponenten mit ihren Modellen und das kann Dir kein GUI-Builder abnehmen.


Swing Data Binding - Google Web Toolkit - Google Code ... dich bekehr ich auch noch :joke:


----------



## Kr0e (8. Jul 2011)

Typisch Google... Da denkt man, man kennt alles oder bzw hat nen groben Überblick... Und dann kommt Google wieder mit einem super-duper-bis-dato-einzigartigen-Produkt daher... Sieht wirklich interssant aus... Ich sehs mir auch mal an,..


----------



## Ebenius (8. Jul 2011)

Tomate_Salat hat gesagt.:


> Swing Data Binding - Google Web Toolkit - Google Code ... dich bekehr ich auch noch :joke:


Na wir schauen mal, ob Du das schaffst. ;-)

Ebenius


----------



## Tomate_Salat (9. Jul 2011)

Kr0e hat gesagt.:


> Typisch Google... Da denkt man, man kennt alles oder bzw hat nen groben Überblick... Und dann kommt Google wieder mit einem super-duper-bis-dato-einzigartigen-Produkt daher... Sieht wirklich interssant aus... Ich sehs mir auch mal an,..


Noch viel schöner. Das Produkt war vorher mal ein Kostenpflichtiges (zusätzlich mit anderen Tools). Google hat gesagt: diese Tools sollte jedem Entwickler zu verfügung stehen und hat die Entwicklerfirma gekauft und vertreibt die Produkte jz kostenfrei ... ich mag google 



Ebenius hat gesagt.:


> Na wir schauen mal, ob Du das schaffst. ;-)


Klingt wie eine Herausforderung . Aber einen Blick kannste ja mal drauf werfen, denn Hey, es ist kostenfrei  und das Databinding ist ne super Sache. Braucht zwar ein wenig Einarbeitung, aber man kann damit wirklich schnell Zusammenspiele abbilden. Und was das Tool nicht kann, das brauchste eh nicht


----------



## Gast2 (9. Jul 2011)

Wegwerf Prototypen sind mit einem GUI-Builder okay...

Alles andere sollte man von Hand machen, da man viel mehr Möglichkeiten hat und die Kunden eh immer besondere Wünschen haben, die man sonst nicht abbilden kann.

Ich baue Swing + EclipseRCP per Hand. Man braucht defintiv nicht länger als mit einem GUI-Builder.


----------



## Unregistriert (9. Jul 2011)

Ebenius hat gesagt.:


> Wie viel Zeit drauf geht, hängt doch in der Regel nicht von dem Anordnen einiger Buttons oder dem erzeugen einzelner Event-Methoden ab. Der Hauptaufwand steckt doch im Zusammenspiel der Komponenten mit ihren Modellen und das kann Dir kein GUI-Builder abnehmen.





Kr0e hat gesagt.:


> dann kommt Google wieder mit einem super-duper-bis-dato-einzigartigen-Produkt daher


Äh naja nichts für ungut, aber data binding libraries gibt's auch für java schon seit langem wie Sand am Meer, einzigartig ist daran nichts. Soweit ich weiß können Netbeans und IntelliJ das auch seit langem von haus aus im GUI Builder einsetzen.


----------



## Dit_ (10. Jul 2011)

Ich baue ebenfalls die GUIs "von Hand", würde ich auch jedem empfehlen. Ich verwende TableLayout. Mit der Zeit habe ich bemerkt, dass ich immer wieder die gleichen Componenten brauche, so habe ich meine eigene "mini-Factory-Lib" zusammengestellt. Dadurch kann ich jetzt viel viel schneller eine ordentliche Gui zusammenbasteln.


----------



## izR2rFTw (13. Dez 2013)

Hallo Ebenius,

mich würde mal interessieren, wie du komplexe GUIs von Hand und ohne GUI-Builder realisiert bekommst. Kannst du mal ein paar Code-Beispiele geben?


----------



## rme (13. Dez 2013)

Ich frage mich, wie man komplexe GUIs _mit_ GUI-Buildern hinbekommen soll, sodass der Code danach noch wartbar ist. Vielleicht gibt es ein Missverständnis darüber, was eine GUI komplex macht? Oder anders gefragt: Ab wann gibt es für dich eine Rechtfertigung, einen GUI-Builder einzusetzen? Hast du vielleicht einen Screenshot einer GUI, die bei dir unter komplex fällt?

Ich meine, wenn zu viele Sachen gleichzeitig sichtbar sind, ist das doch auch für den Anwender unschön. Ich benutze normalerweise Tabs oder ähnliches, die ein paar Komponenten anzeigen. Jeder Tab wäre dann ein Panel oder eine Komponente einer eigenen Klasse, also ist im Code alles sauber getrennt und keine Klasse hat mehr als vielleicht 200 Zeilen.


----------



## ARadauer (13. Dez 2013)

Teile und hersche!


----------

