# Wofür Canvas?



## mavinatic (14. Okt 2011)

Hallo community,

ich bin momentan dabei ein kleines Multiplayerspiel zu entwickeln. Jedoch stelle ich mir die Frage: Was kann dieses Canvas, was ein JPanel nicht kann?

Wieso Canvas? Vor- und Nachteile?! Irgendwie find ich unter google nichts Gutes!

Gruß


----------



## hdi (14. Okt 2011)

Erstmal Vorsicht: Canvas ist eine AWT-Komponente, JPanel eine Swing-Komponente. Da man AWT und Swing nicht mischen sollte erübrigt sich die Frage schon mal. 

Was man also gegenüberstellen muss ist Canvas und Panel (Ohne das "J", das ist dann wieder AWT). Und der Unterschied ist: Canvas ist (_lediglich_) zum Zeichnen und als Interaktionsfläche für Userinput (Maus- & Tastatureingaben) gedacht. Panel bietet diese Funktionalität auch, fungiert aber zusätzlich noch als Container, d.h. ein Panel kann als Layout-Komponente dienen (Du kannst Widgets da einfügen, zB Buttons usw).

Ich würde pauschal ein Panel nehmen. Oder eben JPanel, wenn du in Swing programmierst, aber da kommt Canvas wie gesagt eh nicht in Frage.


----------



## mavinatic (14. Okt 2011)

Also ist es im prinzip egal ob ich Panel, Canvas oder JPanel nehm, denn ich will ja eh nur Zeichnen ;-)


----------



## hdi (14. Okt 2011)

Nein! Wenn du eine Swing-GUI programmierst *musst *du JPanel nehmen. Wenn du AWT programmierst *kannst *du zwischen Canvas und Panel (NICHT *J*Panel) wählen.


----------



## mavinatic (14. Okt 2011)

Ja dem bin ich mir bewusst mit AWT bzw. Swing, dass ich da keine anderen Komponenten nehmen kann, welches ist performanter? Panel / Canvas? Gibts vllt eine ähnliche Variante bei Swing?


----------



## hdi (14. Okt 2011)

> welches ist performanter?


Die Klassen selbst implizieren keine bestimmte Performanz. Kommt drauf an wie du es nutzt. Und selbst dann nicht  Wie gesagt in deinem Fall ist es egal ob Canvas oder Panel, da du keinen Container brauchst sondenr nur malen willst.



> Gibts vllt eine ähnliche Variante bei Swing?


Nicht wirklich. Es gäbe zwar JComponent, aber auch das ist schon ein Container. Dann kannste gleich JPanel nehmen.

Um's zusammenzufassen:
AWT = Panel (vergiss Canvas einfach)
Swing = JPanel

Und gut is... und vergiss die Sache mit der Performanz, das ist Quatsch


----------

