# AWT oder Swing



## Kaffebohne (19. Jul 2012)

Das Thema ist zwar schon mehrfach angesprochen worden, aber eine abschließende Antwort konnte ich trotz längerer Suche (überwiegend hier in diesem wunderbaren Forum ) nicht finden.

Verstanden habe ich Folgendes: Java selbst hatte nie das Augenmerk auf Spieleentwicklung gehabt, sowohl AWT als auch Swing sind für GUIs gedacht. AWT ermöglicht mir Zugriff auf "schwergewichtige" Systemkomponenten (daher ist es nicht so umfangreich, weil aufgrund der angestrebten Plattformunabhängigkeit nur solche Komponenten möglich sind, die sich alle Plattformen teilen), Swing hingegen bietet mir vollständig in Java implementierte "leichtgewichtige" Komponenten und ist deshalb umfangreicher und sieht überall exakt gleich aus.

Nun habe ich eh nicht vor, bereits existierende Komponenten zu verwenden, sondern alles zu Fuß zu machen, daher meine einzige Anforderung an Java ist eine bemalbare Oberfläche. Da jetzt Swing auf AWT teilweise aufbaut (JFrame erbt von Frame), dachte ich mir, dass ich auf die zusätzlichen Features verzichten kann, obwohl immer wieder gesagt wird, dass man AWT vermeiden sollte, es sei alt und nicht mehr modern (aber genau wegen dieser Eigenschaft als Basis glaube ich nicht, dass es "verschwinden" wird). Quaxli benutzt in seinem Tutorial Swing (an dieser Stelle gleich ein Dankeschön dafür), aber ist das wirklich schneller als AWT (beim Spiel "Cell Invaders" schreibt der Autor, er benutzt nur AWT und setzt jedes Pixel einzeln, und das Spiel läuft absolut flüssig und die Grafik ist genial, obwohl es anscheinend sehr viel Rechenleistung frisst)? Und wie komme ich am einfachsten (mit möglichst elementaren Mitteln) an eine Leinwand (Canvas), zum Beispiel empfinde ich es als unnötig, ein Frame (mit Rahmen (etc.)!) zu erstellen, wenn ich eh in den Vollbildmodus wechseln möchte?

Vielen Dank schon mal für Antworten!

PS: Fertige Bibliotheken wie LWJGL will ich zumindest anfangs nicht verwenden, einerseits wegen des Lerneffekts und andererseits gebe ich mich mit "simplerer" Grafik zufrieden, meine Zeit investiere ich lieber in ein schönes Spiel anstatt eine zeitgemessene Grafik!


----------



## SlaterB (19. Jul 2012)

in einem Tutorial geht es zum zig einzelne Konzepte, paint-Befehle, Listener, die Performanz ist nicht wichtig, 
Swing geht für einfache Demos genauso

dein Programm solltest du vielleicht so implementieren, dass 99.9% unabhängig von Swing/ AWI in einfachen Klassen stecken, 
in Methoden die Graphics von außen übergeben bekommen, ob nun von (J)Component oder Canvas geerbt oder besser sogar nicht,

dann kannst du am Ende schnell ein Swing- oder AWT-Frame bauen und es in beiden ablaufen lassen, 
sicher noch mehr was auf Graphics basiert, falls es das gibt
wenn du Zeichenbefehle wie Pixel setzen noch in Basismethoden versteckst, dann geht gewiss jedes Java-GUI-Framework wie auch SWT recht flott angebunden (falls dieses nicht eh auch Graphics hat)


----------



## Kaffebohne (20. Jul 2012)

Und dann nachher einfach ausprobieren, was besser funzt?


----------



## Empire Phoenix (20. Jul 2012)

Jo, swing soltle allerdings für normale ansprüche vollkommen reichen . Mach dir darüber erstmal keine sorgen.


----------



## Paddelpirat (20. Jul 2012)

Und mal wieder kann man auch JavaFX 2 in den Raum werfen. Das dürfte eigentlich nochmal ne Ecke schneller sein, da es auch die Grafikkarte ausnutzen kann.


----------



## Kr0e (20. Jul 2012)

Kein Swing, bloß nicht. Nimm AWT + Active Rendering.

Alles andere ist performance-technisch gesehen Kinderkram. SOlltest du allerdings nicht derartige Performance benötigen, dann bleib bei Swing.

Und natürlich ist OpenGL dann nochmal Generation schneller als AWT + Active Rendering.


Nimm für deine Aufgabe das entsprechende Tool. Aber dir sollte diese Hierarchie klar sein. Swing ist nichts für Spiele, da passive Rendering (Rendern mit Events - Swing eben) einfahc nicht dafür gedacht ist.

Ein kleiner Anhaltspunkt: Simples Memory, oder auch ein simpler Jump'n'Run gehen auch mit Swing. Ein 2d Strategiespiel mit isometrischer Grafik alá AOE2 würde ich dann allerdings NUR mit OpenGL machen oder von mir aus noch Active Rendering, aber hier müsste man dann entsprechenden Know How haben, wie man dann das Beste rausholt, da man sich hier schon an den GRenzen bewegt. Bei OpenGL stößt du mit sowas noch lange nicht an die Grenzen, hier könnte man auch "unschön" programmieren und es würde dennoch was gutes rauskommen...

Falls du dich für OpenGL entscheidest: Slick2D ... beste wo gibt


----------



## Empire Phoenix (20. Jul 2012)

mit opengl öffnest du natürlicha uch eine box der pandore , gerade wenn es das erste spiel project ist.

Und nen age of empires würde man wohl noch mit swing hinbekommen, aber als einstieg ist das sowieso etwas zu viel oder?
(Man kann btw mit einigen tricks in swing auch mehr oder weniger active rendern)


----------



## Kaffebohne (21. Jul 2012)

Danke für die vielen Antworten.


> dein Programm solltest du vielleicht so implementieren, dass 99.9% unabhängig von Swing/ AWI in einfachen Klassen stecken





> Nimm AWT + Active Rendering


Beides schwebte mir schon so vor, aber nach Schauen in den Link stelle ich fest, dass es doch etwas umständlicher ist, an ein Graphics-Objekt mit direktem Zugriff auf den Bildschirm heranzukommen, als ich dachte, da bastel ich dann einfach so lange rum, bis es klappt 
Ich hoffe, das erfüllt dann meinen Anforderungen an die Grafik, so hoch sind die nicht. Und falls nicht, werde ich mir mal OpenGL und JavaFX ansehen.


----------

