Java - welche GUI-Bibliothek

Technikfreund

Banned
Registriert
Okt. 2018
Beiträge
152
Ich habe vor einiger Zeit ein wenig programmieren in Java gelernt, und meine nun genug über die Grundlagen zu wissen, um das intensive Studium von GUI-Entwicklung in Java zu beginnen. Irgendwann später möchte ich dann auch kleine grafische 2D-Spiele programmieren können, die so aussehen: https://de.wikipedia.org/wiki/Isometrische_Perspektive_in_Computerspielen.
Aber eins nach dem anderen.

Ich habe herausgefunden, dass es drei wesentliche Optionen für die GUI-Entwicklung mit Java gibt. Ich muss dazu sagen, dass ich den Anspruch habe, immer mit der aktuellsten Version von Java zu arbeiten, derzeit Java 11.

AWT/Swing
+ in der Java-Standardbibliothek enthalten
+ viel Einsteigerliteratur
- wird nicht mehr wesentlich weiterentwickelt
- schon seit Jahren in vielerlei Hinsicht veraltet
- hässlicher Programmierstil notwendig (alles hartkodiert, keine deklarative GUI-Beschreibung, umständliches Layoutmanagement)

JavaFX
+ moderne GUI-Entwicklung
+ deklarative GUI-Beschreibung möglich, strikte Trennung von Funktion und Design (ähnlich HTML, CSS)
- kaum Einsteigerlektüre, vorallem Softwaredesign wird nicht wirklich behandelt
- wird nicht oft genutzt
- seit Java 11 aus der Standardbibliothek entfernt

SWT
+ alt, aber modern zugleich
+ solide
+ wird relativ oft verwendet (im Vergleich zu JavaFX)
- keine tiefgehende Einsteigerliteratur

Da ich ein Einsteiger bin, ist es mir wichtig, von guten Tutorials zu profitieren, um Anfängerpfusch und einen laienhaften Programmierstil gleich von Anfang an zu vermeiden. Ich bin da ein bisschen perfektionistisch. Traurigerweise scheint sich die Einsteigerliteratur vorallem auf AWT/Swing zu konzentrieren, während JavaFX und SWT eher für Leute gedacht ist, die schon viel Ahnung von AWT/Swing haben, und auf moderne Technologien umsteigen möchten. Deswegen liest sich Literatur für SWT und JavaFX meist wie ein Umsteigerleitfaden für Erfahrene. Wollte ich also direkt mit SWT bzw. JavaFX anfangen, bedeutete dies, dass ich viel querlesen muss und auch viele Anfängerfehler machen würde, vor denen ich bei guter Einsteigerliteratur, die es da nicht wirklich gibt, gewarnt worden wäre.

Hinzu kommt das Problem, dass ich generell noch keine Ahnung von GUI-Entwicklung habe, und daher höchstwahrscheinlich schlechte Softwaredesign-Entscheidungen treffen werde, wenn ich keine gute Anfängerliteratur nutze, auch wenn die GUI ihren Zweck erfüllt.

Ich sehe zurzeit zwei Strategien, um GUI-Programmierung zu erlernen:

Strategie 1:
Ich lerne, auch wenn es veraltet ist, GUIs in AWT/Swing mithilfe von guter Einsteigerliteratur zu programmieren, auch wenn es sich bei den GUI-Elementen dieser Bibliothek höchstwahrscheinlich um Wegwerfwissen handelt, um die guten Ratschläge und Grundlagen der Einsteigerliteratur mitnehmen zu können, und steige dann auf JavaFX / SWT um.

Strategie 2:
Ich lerne direkt JavaFX / SWT - Programmierung, auch wenn mir dann gute Anfängerratschläge durch die Lappen gehen könnten, und meine ersten Projekte rein funktionaler Spaghetticode werden.

Meien Fragen wären:

1. Welche Lernstrategie würdet ihr mir empfehlen? Gibt es evtl. noch eine völlig andere Lernstrategie?
2. Gibt es vielleicht auch doch gute Einsteigerliteratur für JavaFX und SWT, die auch Programmierer berücksichtigt, die GUI's noch nie unter der Haube angerührt haben?
3. Auch falls ich zuerst Swing lernen würde, früher oder später stellt sich dann doch die Frage: JavaFX oder SWT? Was sollte ich (zuerst) lernen?
4. Gibt es noch eine völlig andere GUI-Bilbiothek, die anfängerfreundlich ist und mit der viele Open-Source-Projekte, die man dann studieren kann, realisiert wurden? Könnt ihr die als Ersteinstieg in die GUI-Programmierung empfehlen?
 
Zuletzt bearbeitet:
Meiner Meinung nach, ist es unwesentlich womit du anfängst, solange es sich nicht um konkrete Arbeitsaufträge vom Kunden handelt, der dir eine genaue Anforderung aufdrückt.

Wenn du der meinung bist, das JavaFX "state of the art" ist und es sich um zukünftige Technologie handelt, warum sollte man dann auf tote Pferde setzen ;)?
 
G-Red schrieb:
Wenn du der meinung bist, das JavaFX "state of the art" ist und es sich um zukünftige Technologie handelt, warum sollte man dann auf tote Pferde setzen ;)?

Och Mensch, gerade auf diesen Punkt bin ich doch lang und breit eingegangen...

Traurigerweise scheint sich die Einsteigerliteratur vorallem auf AWT/Swing zu konzentrieren, während JavaFX und SWT eher für Leute gedacht ist, die schon viel Ahnung von AWT/Swing haben, und auf moderne Technologien umsteigen möchten. Deswegen liest sich Literatur für SWT und JavaFX meist wie ein Umsteigerleitfaden für Erfahrene. Wollte ich also direkt mit SWT bzw. JavaFX anfangen, bedeutete dies, dass ich viel querlesen muss und auch viele Anfängerfehler machen würde, vor denen ich bei guter Einsteigerliteratur, die es da nicht wirklich gibt, gewarnt worden wäre.

Ich lerne, auch wenn es veraltet ist, GUIs in AWT/Swing mithilfe von guter Einsteigerliteratur zu programmieren, auch wenn es sich bei den GUI-Elementen dieser Bibliothek höchstwahrscheinlich um Wegwerfwissen handelt, um die guten Ratschläge und Grundlagen der Einsteigerliteratur mitnehmen zu können, und steige dann auf JavaFX / SWT um.

Vielen Dank für deinen Tipp am Anfang, aber bitte den Post vollständig überfliegen, bevor man was schreibt.
 
  • Gefällt mir
Reaktionen: new Account()
Technikfreund schrieb:
Traurigerweise scheint sich die Einsteigerliteratur vorallem auf AWT/Swing zu konzentrieren, während JavaFX und SWT eher für Leute gedacht ist, die schon viel Ahnung von AWT/Swing haben, und auf moderne Technologien umsteigen möchten. Deswegen liest sich Literatur für SWT und JavaFX meist wie ein Umsteigerleitfaden für Erfahrene.
Hier ein Kurs, der keine GUI-Vorkenntnisse voraussetzt:
https://www.pluralsight.com/courses/java-se-java-fx-application-building-your-first
Gibt bestimmt noch mehr - und es muss diese ja nicht im Überfluss geben.
 
Technikfreund schrieb:
Ich habe vor einiger Zeit ein wenig programmieren in Java gelernt, und meine nun genug über die Grundlagen zu wissen, um das intensive Studium von GUI-Entwicklung in Java zu beginnen. Irgendwann später möchte ich dann auch kleine grafische 2D-Spiele programmieren können, die so aussehen: https://de.wikipedia.org/wiki/Isometrische_Perspektive_in_Computerspielen.
Aber eins nach dem anderen.

Wenn es Dir in erster Linie um Spieleprogrammierung geht, würde ich mich gleich damit beschäftigen. LibGDX oder jMonkey etc. wären hier bessere Kandidaten.

Wenn es nur ums Lernen geht, würde ich JavaFX nehmen, einfach weil dies das modernste der Drei ist und die Programmierung mit Swing/SWT dagegen antiquiert wirkt.

Für Swing spricht in erster Linie, dass es überall verfügbar ist. Die anderen musst Du selbst einbinden. Fürs Layouten nutze ich MigLayout. Damit kann man praktisch alles erschlagen (auch unter SWT).

SWT gefällt mir persönlich am wenigsten. Die Anwendungen sehen auf Anhieb weitgehend nativ aus, aber man ist damit nicht so flexibel.

Die ersten Projekte werden immer Lernprojekte sein. Egal ob mit bester Literatur oder nicht. Es braucht immer eine gewisse Zeit, um die entsprechenden Konzepte zu verinnerlichen. Ich würde mir von Anfängerliteratur, zumal älterer, nicht allzu viel versprechen.

Für die Zukunft sieht es für alle drei Toolkits nicht so wirklich rosig aus.
 
Technikfreund schrieb:
Och Mensch, gerade auf diesen Punkt bin ich doch lang und breit eingegangen...

Ja sorry Mensch, aber was möchtest du hören? Es gibt nicht DEN Masterplan den du einschlagen kannst. Klar kannst du viele Langzeitentwickler nach deren Erfahung un Meinun fragen, aber du wirdst höchstwahrscheinlich genausoviele unterschiedliche Antworten bekommen.

Schlußendlich ist es deine eigene Erfahung die du individuell sammeln wirdst. Wie gesagt, ich für meinen Teil würde nicht aufs tote Pferd setzten @Rossie hält es scheinbar ähnlich.

Einfach beginnen und schauen wochin dich der Weg führt ;).
 
Technikfreund schrieb:
kleine grafische 2D-Spiele programmieren können

Wenn in Java, dann würde ich dafür die Jmonkeyengine nehmen. Da hast Du Support für 2D Grafik und auch alles drumherum, wenn es mal komplexer werden soll (doch 3D, Netzwerk, Sound, ...).

Viel Spaß! :)
 
Da ich beruflich mit SWT arbeite, kann ich dir einige Tipps daür geben. Gleich vorweg, die API ist ausgesprochen hässlich, da SWT sehr nah an Win32-API angelehnt ist. Dafür werden -soweit möglich- native Steuerelemente genutzt. Die GUI sieht also nicht so aus wie Raumschiff mit Swing;) Es hat allerdings den Preis, dass man sich um Freigeben der nativen Systemressourcen selbst kümmern muss -Stichwort dispose()- und dass der Java-Vorteil der Plattformunabhängigkeit verloren geht. Das Schönste an SWT ist imo die Erweiterung JFace mit den Viewern, Wizards und Dialogen.

Hier paar Links, die mir zu Anfangszeiten gut geholfen haben. Englischkentnisse werden als Programmierer vorrausgesetzt.
In Eclipse gibt es den Window Builder Pro für SWT und Swing, der einigermaßen erträglichen Code produziert. Außerdem kommt er auch relativ gut mit nicht generierten Code zurecht. Somit habe ich folgende Entwichlungs-Strategie:
  1. Grundlayout mit dem Window-Builder erstellen
  2. Code anpassen und ergänzen, z.B. das Event-Handling mit dem Listener-Pattern
  3. Im Window-Builder das Layout kontrollieren
  4. Anwendung ausführen und testen
Viel Spaß:) Scheue dich nicht vor Rückfragen, am Anfang ist es wirklich erschlagend.

PS: Wenn du Spiele statt "normalen, langweiligen Anwendungen" (etwas überspitzt formuliert) entwickeln möchtest, studiere lieber eine Gameenginge z.B. Unreal Engine oder Unity. Allerings habe ich von beiden keine Ahnung, kann dir dabei also nicht helfen:D Ganz nebenbei würdest du auch andere Programmiersprachen lernen.
 
Zurück
Oben