Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich muss ein Kurzreferat über "Zeichnen in Swing" halten und lese mich deshalb in die Obeflächenprogrammierung ein. Das Referat darf maximal vier Minuten dauern und da das Kapitel so umfangreich ist, ist man schnell über dem Zeitlimit.
Als Anfänger weiß ich leider nicht, was für das Thema "Zeichnen in Swing" wirklich relevant ist und was nicht.
Wenn ich auf die Architektur MVC eingehe, dürften die vier Minuten bereits ausgeschöpft sein, andererseits halte ich es doch für wichtig, um die Zusammenhänge zwischen Publisher-Subscriber, der Ereignishierarchie, -beobachtung, -behandlung und -quellen zu verstehen.
Es wäre super, wenn jemand seine Meinung darüber schreiben würde, welche Schlagworte vielleicht doch am sinnvollsten sind oder sogar eine grobe Gliederung nennen.
Wenn du anfängst über MVC zu reden wird höhstwahrscheinlich der Spruch kommen "Thema verfehlt, 6, setzen".
Die 4 Minuten erscheinen mir etwas suspekt, aber ok, wenn es sein muss.
Du solltest eher auf das Zeichnen konzentrierer. Z.b. kannst du sagen, wodurch so ein JButton auf dem Bildschirm erscheint. Sagen, dass du z.B. JPanel schnappen kannst du alles mögliche darauf malen kannst. (Natürlich auch das "wie" beantworten"). Dann kannst du auch noch AWT anschneiden und sagen, dass z.B. Canvas existieren (so als Gegenbeispiel). Dann sind die 4 Minuten auch schon längst um.
"Zeichnen in Swing" und MVC + Oberflächenprogrammierung sind zwei verschiedene Dinge, die haben nicht viel gemeinsam.
"Zeichnen in Swing" hat eher was mit paintComponent überschreiben und dort dann linien/kreise/schriften etc. zeichen zu tun.
Du könntest dann zunächst mal die paintComponent Methode beschreiben:
- wann wird die aufgerufen (in dem zusammenhang dann noch repaint() erläutern)
- von wem wird die aufgerufen
- super.paintComponent();
Danach kannst du auf Graphics bzw. Graphics2D eingehen und beschrieben was man damit alles machen kann.
Dazu müsste auch nen tutorial in der FAQ verlinkt sein.
Danke soweit.
Kommt es mir nur so vor, oder gehört die GUI-Programmierung zu den schwierigsten Dingen in Java?
Wie auch immer... Ich habe im Tutorial leider nicht verstanden, warum der anfängliche Weg falsch ist. Kann das vielleicht bitte jemand in einfachen Worten kurz erklären?
ich muss ein Kurzreferat über "Zeichnen in Swing" halten und lese mich deshalb in die Obeflächenprogrammierung ein. Das Referat darf maximal vier Minuten dauern und da das Kapitel so umfangreich ist, ist man schnell über dem Zeitlimit.
4 Minuten? An der Uni würde die Zeit nicht mal ausreichen seinen Vortrag vom USB-Stick auf den Präsentationsrechner zu kopieren und den Beamer zu justieren. Weiterhin ist das Thema wirklich zu umfangreich, um es in 4 Minuten überhaupt anzukratzen.
ich versuche es mal, die folgenden Punkte sind Minuten:
1. Swing ist ein Framework für Anwenderoberflächengestaltung, -verwaltung und -interaktivität. Das eigentliche Zeichnen in Swing wird von System "Java2D" übernommen, welches auch ohne Swing verwendet werden kann.
2. Der übliche Weg in Swing zu zeichnen ist die Erzeugung einer eigenen Klasse (z.B. ZeichenPanel), welche von JPanel erbt. In der eigenen Klasse wird die Methode "paintComponent(Graphics g)" überschrieben. Diese Methode wird vom jeweiligen Betriebssystem aufgerufen, wenn das Panel neugezeichnet werden muss. Die Zeichnung selber ist flüchtig, d.h. wird ein anderes Fenster über das Panel geschoben, wird ein Teil oder die ganze Zeichnung gelöscht. Wenn die Sicht auf das Panel wieder frei ist, wird "paintComponent(Graphics g)" vom Betriebssystem aufgerufen. Selber kann man diesen Vorgang mit "repaint()", welches in JPanel zu finden ist, anstoßen.
Java:
public class ZeichenPanel extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
}
}
a
3. Das an paintComponent übergebene Objekt "Graphics" gehört zu Java2D. Dieses Objekt stellt Methoden für Grundzeichenoperationen zu Verfügung, z.B. für Linien, Kreise, Polygone oder Text. Eigentlich ist das Objekt "Graphics" immer vom Typ Graphics2D. Es ist historisch bedingt, dass es als Graphics deklariert wird, jeder kann es selber nachlesen. So kann man immer Graphics zu Graphics2D umwandeln, sofern in der Dokumentation nicht was anderes steht. Beispiel:
Java:
public class ZeichenPanel extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setColor(Color.black);
g2.drawLine(10, 10, 100, 100);
}
}
4. Java2D umschließt noch eine Reihe weiterer Klassen ein. Diese sind in java.awt und den Subpakages zu finden, eine genauere Auflistung steht in der Java API Dokumentation. Java2D beherrscht geometrische Operationen, Vektor- und Rastergrafik, Text-über-Schriftarten-Darstellungen, Bildverarbeitung, Ausgabe auf den Drucker und (einen eingeschränkten) Zugriff auf die Hardware der Grafikkarte.
(Hier sind die 4 Minuten schon längst um, deshalb optional)
5. Graphics bzw. Graphics2D kann auch in einen Buffer zeichnen, welcher dann auf das JPanel kopiert wird. Ein Buffer kann als Leinwand im Speicher angesehen werden. Im Gegensatz zu einem JPanel ist diese Zeichnung nicht flüchtig. Der Umweg über einen Buffer wird zu Optimierung und für komplizierte Operationen verwendet, wo die einzelnen Pixel einer Zeichnung mehrmals gelesen und geschrieben werden.
Wenn ich auf die Architektur MVC eingehe, dürften die vier Minuten bereits ausgeschöpft sein, andererseits halte ich es doch für wichtig, um die Zusammenhänge zwischen Publisher-Subscriber, der Ereignishierarchie, -beobachtung, -behandlung und -quellen zu verstehen.
Danke Slawa für das ausführliche Konzept.
Ich habe noch einige Fragen, zu den verschiedenen Punkten.
Zu 1.) AWT ist ja das, was von Anfang an existiert hat und Swing baut darauf auf und gilt als moderner.
Leider verstehe ich nicht, welche Rolle die "Java 2D API" übernimmt, denn ich dachte Swing würde zum Zeichnen vollkommen ausreichen?
Zu 3.) Ist mit "Graphics" die Klasse aus dem Package "java.awt" gemeint?
jain. AWT ist eine Schnittstelle zu den UI-Elementen des jeweiligen Betriebssystems. Weil dadurch die Java-Anwendungen auf jeder Plattform unterschiedliche aussahen und auch die Bedienung anders war, wurde Swing auf Basis von AWT gebaut. Während in AWT die einzelnen Komponenten vom jeweiligen Betriebssystem gezeichnet werden, worauf der Programmierer keinen Einfluss hat, wird in Swing alles innerhalb von Java gezeichnet und der Programmierer kann das Aussehen exakt bestimmten. Weiterhin sieht Swing auf jeder Plattform gleich aus.
Analogie zum Haus. Swing sind die Ziegel, die Fenster, die Türen, die Möbel. Java2D ist der Putz, die Farbe, die Tapeten, die Holzart, die Bilder an der Wand. Anders gesagt, Swing kümmert sich um die räumliche Verteilung und/oder Organisation von UI-Elementen. Java2D gibt ihnen das Aussehen. Weiterhin ist Java2D nicht nur auf Swing beschränkt. Damit lassen sich auch Off-Screen Operationen durchführen, wie z.B. die automatische Bearbeitung von Bildern. 2D Spiele entstehen großenteils mit Java2D und nicht mit Swing.