# SWING oder SWT



## Logaff (5. Sep 2012)

Hiho,
ich wollte euch Fragen für was man genau SWING und für was man SWT nutzen sollte? Wo liegen die Vorteile, wo die Nachteile? Und was ist verbreiteter?

Ich weiss das ist die Wahl zwischen Pest und Cholera. Und ich weiss das "Kommt drauf an" die Lösung auf semptliche Fragen in der Informatik ist.

mfg,
Andreas


----------



## Gabe (5. Sep 2012)

> Ich weiss das ist die Wahl zwischen Pest und Cholera.


Wat? Wo hast du das denn bitte her? Das ist ziemlicher Schwachsinn.


----------



## Logaff (5. Sep 2012)

Es ist ein Spruch hat nichts mit der Wertung von irg welchen Biblotheken zu tun -,-


----------



## Marco13 (5. Sep 2012)

Eine konkrete Antwort werde ich mal nicht geben, die wäre zu biased  Ich kann nur sagen, dass sowas wie Eclipse RCP und GEF eben auf SWT aufsetzen, und man Swing da nur mit einigen Workarounds reinbekommt. Aber ... abgesehen davon... eine _indirekte_ Antwort auf deine Frage:

Falls jemand irgendeinen Grund nennen kann, in einem nicht-RCP-Programm SWT statt Swing zu verwenden, würde ich den auch gerne mal hören


----------



## Beni (5. Sep 2012)

SWT kann ganz hübsch aussehen, auch in einer nicht-RPC Anwendung? Aber andererseit ist Swing ziemlich einfach, robust, und es gibt unzählige Tutorials...


----------



## Tomate_Salat (5. Sep 2012)

Ich hab schon SWT außerhalb eines eclipse-RCPs verwendet (würde ich aber mitlerweile nicht mehr tun. Als RCP ists angenehmer) und ich hab mal "Spaßeshalber" ein RCP in eclipse mit Swing aufgebaut. Geht auch. Nur muss man eben bei einiges selber implementieren, dass bei SWT einfach laufen würde.

Ich bin so assozial und werfe mal JavaFX 2.0 ein. Das hat auch einige netten Features .

@TO: Wenn du beides (SWT|Swing) kannst/kennst/lernen musst, dann schau dir doch an, was dir das eclipse RCP bietet. Brauchst du davon etwas, was z.B. Swing nicht bietet/bieten kann --> SWT/JFace. Ansonsten einfach das nehmen, mit dem du lieber arbeitest.


----------



## Bernd Hohmann (5. Sep 2012)

Beni hat gesagt.:


> Aber andererseit ist Swing ziemlich einfach, robust, und es gibt unzählige Tutorials...



Ist ja schon seit 1997 auf dem Markt (da hab ich mit Swing angefangen, Java 1.1.5 unter OS/2) und hat eine Ewigkeit gebraucht, bis die Runtime hinreichend viele Shortcuts für Swing intern eingebaut bekommen hat.

Hatte jetzt gut 6 Jahre GUI Abstinenz in Java und musste mich wieder einarbeiten.

"Einfach" ist Swing solange wie man nix ungewöhnliches möchte (zb. den Kram ordentlich unter Unix aussehen zu lassen), robust ist es auf jeden Fall weil man sich gewisse Tücken der jeweiligen Plattformen erspart und die Garbage Collection alles unter Kontrolle hat.

Trotzdem bin ich jetzt nach reiflicher Überlegung nach SWT umgestiegen weil der Plattformspezifische L&F die Klientel (aka Schlipsträger) besser anspricht. Natürlich kann man Swing da verbiegen bis zum geht nicht mehr, aber SWT entspricht meinem Bedürfnis "Einsteigen und Motor anlassen" besser als Swing.

Bernd

PS: Die Aussage "es gibt unzählige Tutorials" lasse ich nur ungern für die Qualität einer Programmiersprache gelten. 

Zwar korreliert die Anzahl der Fragen zu einer Programmiersprache mit dem Verbreitungsgrad, aber mit zunehmenden "Alter" einer Sprache auch mit den Problemen die man mit der Sprache bzw. Runtime hat.

zB. gibt es recht wenige Tutorials und Foren für Powerbasic etc. obwohl die Compiler sehr verbreitet sind - die Sprache und die Libs können wenig, daher sind sie auch sehr schmerzfrei anzuwenden und machen keinen Ärger.


----------



## Tomate_Salat (5. Sep 2012)

Bernd Hohmann hat gesagt.:


> rotzdem bin ich jetzt nach reiflicher Überlegung nach SWT umgestiegen weil der Plattformspezifische L&F die Klientel (aka Schlipsträger) besser anspricht.



[japi]UIManager#getSystemLookAndFeelClassName()[/japi] und imho weniger Grund als das mit den "tutorials" ;-). Aber es gibt denke ich für beides genug im Netz zu finden.


----------



## Gast2 (6. Sep 2012)

Ich würde SWT nie ohne JFace benutzen. Ich würde sogar soweit gehen, dass JFace SWT erst benutzbar macht und das Viewer Konzept sehr mächtig ist.
Ansonsten hat SWT/JFace ein paar nettere widgets und ein super databinding, dass dir Swing nicht bieten kann, dafür musst beim Bauen einer plain SWT/JFace immer auf dein OS achten.
Gibt für beides Vor-und Nachteile je nachdem was du erreichen willst.

Aber wenn du eh SWT/JFace benutzen willst dann nehm einen Eclipse RCP nimmt dir viel arbeit ab und e4 lässt sich auch ein "bischen" stylen und hat nette Feature wie DI .

Ansonsten lohnt sich bestimmt auch ein Blick auf JavaFX würde ich wohl jetzt eher nehmen als Swing...
Gibt auch ein e4 fork wo du JavaFX und RCP zusammen verwenden kannst.
Kai's Blog  JavaFX 2.0, Swing & SWT Renderers for the Eclipse 4.x Application Platform



Marco13 hat gesagt.:


> wie Eclipse RCP und GEF eben auf SWT aufsetzen, und man Swing da nur mit einigen Workarounds reinbekommt.



Echt gibt es sowas für Swing? Also in die Richtung GEF,GMF, Graphiti? Hab ich noch nirgends gesehen, dass Swing sowas bietet.

Also persönlich würde ich für eine Desktop Anwendung immer einen Eclipse RCP, schon allein weil das Ökosystem riesig ist, in Erwägung ziehen mit SWT/JFace oder eben JavaFX, aber heuzutage noch auf Swing zu setzen sehe ich (subjektiv) keinen Vorteil.


----------



## Bernd Hohmann (6. Sep 2012)

SirWayne hat gesagt.:


> Aber wenn du eh SWT/JFace benutzen willst dann nehm einen Eclipse RCP nimmt dir viel arbeit ab und e4 lässt sich auch ein "bischen" stylen und hat nette Feature wie DI .
> 
> Ansonsten lohnt sich bestimmt auch ein Blick auf JavaFX würde ich wohl jetzt eher nehmen als Swing...
> Gibt auch ein e4 fork wo du JavaFX und RCP zusammen verwenden kannst.
> Kai's Blog  JavaFX 2.0, Swing & SWT Renderers for the Eclipse 4.x Application Platform



Da komme ich schon wieder ins Grübeln. Was wird davon in  5 Jahren noch eine stabile Codebasis liefern?

Mein ältestes Projekt (nicht Java) hat eine Codebasis (nicht von mir) von 1988, ist damit 24 Jahre alt und verdient immer noch gutes Geld.

Bernd


----------



## Marco13 (6. Sep 2012)

SirWayne hat gesagt.:


> Also persönlich würde ich für eine Desktop Anwendung immer einen Eclipse RCP, schon allein weil das Ökosystem riesig ist, in Erwägung ziehen mit SWT/JFace oder eben JavaFX, aber heuzutage noch auf Swing zu setzen sehe ich (subjektiv) keinen Vorteil.



*Kommt drauf an* ( ) Für viele Dinge, die mit _Zeichnen_ zu tun haben, ist Swing IMHO um Größenordnungen besser geeignet als SWT. Sowas wie ein BufferedImage, wo man sich mal schnell ein Graphics abholen und mit einem RadialGradientPaint einen Farbverlauf mit Alpha-Kanal reinmalen kann sucht man bei SWT vergebens (und der Krampf, dass man alles mögliche immer "disposen" muss ist ja quasi Anti-Java :autsch: ). Gute High-Level GUI-Components von JTable über JColorChooser bis JInternalFrame und die Möglichkeit dem ganzen mit ein paar Zeilen ein nettes Nimbus-L&F (oder für die Bänker: Das Windows-L&F ) zu verpassen sprechen auch für sich. Aber ich hatte ja auch schon gesagt, dass es sicher Bereiche gibt, wo SWT angebracht ist. 

JavaFX hat aber vermutlich das Potential, Swing in vielen Bereichen abzulösen. Ich war richtig begeistert von einigen Punkten (auch wenn ich bisher noch nicht wirklich was damit _gemacht_ habe  ). Das einzige, was mir daran noch etwas ... unzugänglich erscheint, ist das CSS-Skinning, aber da soll es auch Hilfen dafür geben...


----------



## Gast2 (6. Sep 2012)

Marco13 hat gesagt.:


> *Kommt drauf an* ( ) Für viele Dinge, die mit _Zeichnen_ zu tun haben, ist Swing IMHO um Größenordnungen besser geeignet als SWT. Sowas wie ein BufferedImage, wo man sich mal schnell ein Graphics abholen und mit einem RadialGradientPaint einen Farbverlauf mit Alpha-Kanal reinmalen kann sucht man bei SWT vergebens (und der Krampf, dass man alles mögliche immer "disposen" muss ist ja quasi Anti-Java :autsch: ). Gute High-Level GUI-Components von JTable über JColorChooser bis JInternalFrame und die Möglichkeit dem ganzen mit ein paar Zeilen ein nettes Nimbus-L&F (oder für die Bänker: Das Windows-L&F ) zu verpassen sprechen auch für sich. Aber ich hatte ja auch schon gesagt, dass es sicher Bereiche gibt, wo SWT angebracht ist.



JTable eine gute GUI Componente zu nennen ist ja wohl quark, aber gut bist halt ein Swinger ... Das Viewer Konzept von JFace ist viel viel angenehmer.

Aber ich merke dass du nicht weiß was GEF,GMF und co ist und auch die Mächtigkeit nicht kennst, sonst würdest du das nicht mit dem Swing Zeichnen vergleichen. Solange Swing kein Framework dafür bietet kannst du die Standard Funktionalität damit kaum vergleichen. Schon allein das ganze Drag and Drop Zeug, Palette usw. usw.



Marco13 hat gesagt.:


> und der Krampf, dass man alles mögliche immer "disposen" muss ist ja quasi Anti-Java


Swing hat genauso seine Macken. Du kannst auf GUI Kompoenten im falschen Thread zugreifen das ist genauso ein Krampf usw.


----------



## Marco13 (6. Sep 2012)

Ja, zugegeben (und wie auch schon angedeutet), ich bin mit SWT nicht sooo vertraut, dewegen kann ich das kaum objektiv beurteilen (aber ich behaupte mal, dass das allgemein schwierig ist). Beide haben vor- und Nachteile (und btw: Die JTable ist mit Abstand die komplexeste JComponent, und ... zugegeben, wenn's drum geht einen JButton in eine JTable zu kriegen (oder alles andere, was mit "Editoren" zu tun hat) kann es hakelig werden, aber ... ich kann mir kaum vorstellen, dass das mit SWT sooo viel einfacher ist...)


----------



## Tomate_Salat (6. Sep 2012)

Doch afair sind Tables in SWT einfacher/angenehmer/intuitiver. Hab schon lange nix mehr damit gemacht, aber das war glaube ich mal der Grund, warum ich mir SWT angeschaut hatte.


----------



## Gast2 (6. Sep 2012)

Marco13 hat gesagt.:


> Ja, zugegeben (und wie auch schon angedeutet), ich bin mit SWT nicht sooo vertraut, dewegen kann ich das kaum objektiv beurteilen (aber ich behaupte mal, dass das allgemein schwierig ist). Beide haben vor- und Nachteile (und btw: Die JTable ist mit Abstand die komplexeste JComponent, und ... zugegeben, wenn's drum geht einen JButton in eine JTable zu kriegen (oder alles andere, was mit "Editoren" zu tun hat) kann es hakelig werden, aber ... ich kann mir kaum vorstellen, dass das mit SWT sooo viel einfacher ist...)



Mal so allgemein wir sollten festlegen, dass wenn wir von SWT reden auch JFace mit einbeziehen?
Weil wie gesagt ohne JFace hat SWT keine Vorteile . Das Viewer Konzept von JFace macht SWT erst einsetzbar.

Ja einfach Tabellen und Trees sind mit SWT/JFace auch mit Editoren "leichter", außer man will checkboxen in einer Zelle haben. Aber du darfst nie außer acht lassen, dass du eben dann bei Tabellen/Trees usw. schon Databinding dabei hast, was du bei Swing immer selber machen musst.

Beide Toolkits haben seine Kanten und Macken und ich bin gespannt was JavaFX bietet.
SWT/JFace hat eben den Vorteil von dem Eclipse RCP, das dann schon viel in der UI mitliefert.
Und Frameworks wie GEF,GMF, Graphiti gibt's soviel ich weiß in Swing eben nicht und das selber zu machen (und auch so gut) sind bestimmt viele Mannmonate arbeit.


----------

