Applets und die paint-Methode

Status
Nicht offen für weitere Antworten.
F

Finrod

Gast
Liebe Forengemeinde,

Ich habe eine kleine Verständnisschwierigkeit bezüglich der Methode paint von Applets. Diese wird ja zum Beispiel von einem Webbrowser aufgerufen. Allerdings ist diese Methode ja nicht static, wenn ich mich nicht täusche. Das heisst meiner Meinung nach, dass ein Objekt der Klasse erstellt werden müsste, damit diese Methode überhaupt aufgerufen werden könnte.
Erstellt der Webbrowser in dem Fall selber ein solches Objekt? oder ist die Methode doch static, man sieht es nur nicht? Oder geht das aus irgendeinem anderen grund?
Es funktioniert alles bei mir, aber die Theorie dahinter ist mir wichtig.

Hier ein Beispiel:

Code:
import java.applet.Applet;
import java.awt.*;
import java.io.*;


public class Irgendeinapplet extends Applet
{
   
    public void paint(Graphics gr)
    {
       //Irgendwelche Methoden von gr
    }
}

Wird irgendwann ein "Irgendeinapplet"-Objekt erstellt?


Danke für eure Hilfe,
Finrod
 

JPKI

Top Contributor
Die JVM, die vom Browser gestartet wird, erzeugt ein Objekt deines Applets und ruft darin mit dem Grafikkontext des Browsers die paint-Methode auf.
Das merkst du z.B. daran, dass du einem Applet auch einen Konstruktor verpassen kannst, der als erstes abgehandelt wird (noch vor der init()-Methode).
 
A

Andréas_

Gast
Finrod hat gesagt.:
Erstellt der Webbrowser in dem Fall selber ein solches Objekt? oder ist die Methode doch static, man sieht es nur nicht? Oder geht das aus irgendeinem anderen grund?
Es funktioniert alles bei mir, aber die Theorie dahinter ist mir wichtig.

Hallo Finrod,

die Klasse java.applet.Applet hat eine lange Ahnenreihe. Sieh Dir bitte die Vererbung an, unter:
http://java.sun.com/j2se/1.4.2/docs/api/index.html

Dein Applet, das von java.applet.Applet erbt, erbt alle Methoden, auch die "Callback-Methoden" start(), stop(), und paint( Graphics g ). Die Paint-Methode stammt von java.awt.Container, das Applet hat sie auch nur geerbt. Diese Callback-Methoden werden von einem Anwenderprogramm normalerweise nie aufgerufen, sondern sie sind dazu gedacht, dass man sie "überschreibt". Das Überschreiben einer Methode bedeutet, dass man eine Methode, die geerbt worden ist, mit der gleichen Signatur (Kopfzeile) in der Subklasse noch einmal definiert. Dadurch kann man das geerbte Verhalten modifizieren.
Callback-Methoden werden von anderen Objekten aufgerufen, d.h. es gibt bereits einen Aufrufer, der die Methode aufruft. Das tut er "wenn er es will". Speziell beim Applet ist es letztendlich der Browser, der die paint(...)-Aufrufe auslöst. Er "weiß" selbst, wann das notwendig ist, z.B. wenn das Browserfenster minimiert und dann wiederhergestellt wird. Der Browser erzeugt auch ein Objekt von Deiner Klasse, weil er in der HTML-Datei ein APPLET-Tag findet. In diesem Applet-Tag steht im Attribut CODE der Klassenname Deiner abgeleiteten Applet-Klasse. Aus der Sicht des Browsers handelt es sich aber um die Klasse java.applet.Applet, er "weiß" also gar nicht, dass Du das Verhalten der Standard-Applet Klasse - in paint(..) - modifiziert hast.
Dein Applet selbst verhält sich nun beim Zeichnen anders als das Standard-Applet, das einfach einen grauen Hintergrund zeigt und sonst nichts.
Die hauptsächliche Arbeit beim Programmieren mit Java ist also nicht das Aufrufen von Methoden, sondern das Definieren neuer, bzw. Überschreiben geerbter Methoden. Dadurch kannst Du zwar von der Elternklasse sehr viel "Implementierung = Verhalten" erben, aber an den entscheidenden Stellen Deine Modifikationen anbringen. Die geerbte Methode kann man selbst auch wieder aufrufen, und damit das geerbte Verhalten nutzen. Das geht mit dem Schlüsselwort super.

Konkret in paint könnte das z.B. so aussehen:
Code:
public void paint( java.awt.Graphics graphics ) {
   super.paint( graphics ); // rufe erst die geerbte Methode auf
   graphics.fillOval( 150, 100, 50, 50 );  // zeichnet einen Kreis mit Durchmesser 50 pixel  
}

Das Graphics-Objekt bekommst Du vom Aufrufer (Browser). Um die Erzeugung musst Du Dich nicht sorgen. Du kannst es einfach nutzen und seine Methoden aufrufen. Der Aufruf von super.paint(...) ist allerdings sinnlos, weil
die Methode in java.applet.Applet nichts macht (deshalb auch der graue Hintergrund). Sie sieht dort so aus:
Code:
public void paint( Graphics g ) {
}

Das genau ist der Sinn der Callback-Methoden. Sie existieren nur dazu, dass man sie in einer Subklasse überschreibt. Allerdings existiert bereits irgendwo ein Aufrufer, der eine solche paint-Methode aufruft, ohne zu wissen, dass das Verhalten modifiziert wird. Dieses Prinzip heisst Polymorphismus (Vielgestaltigkeit), d.h. verschiedene Klassen, die in einer Vererbungshierarchie zueinander stehen, haben die selbe Methode (mit den gleichen Parametertypen und dem gleichen Namen), die aber unterschiedliches Verhalten implementieren. Der Aufrufer hat eine abstrakte Sicht auf diese verschiedenen Objekttypen und "weiss" vorher nicht, wie sich das konkrete Objekt verhalten wird. Beispiel: Die abstrakte Superklasse Fahrzeug hat bereits Methoden zum Lenken. Diese Methoden dürfen dort auch abstrakt sein, d.h. es ist nur bekannt, dass es so eine Methode gibt und welche Parameter sie erwartet und welchen Ergebnistyp sie liefert, aber nicht WIE sie intern funktioniert. Erst die Subklassen Fahrrad, PKW, Wassertreter usw. haben vielleicht eine Implementierung. Vielleicht wird aber erst in weiteren Ableitungen (Golf III, Opel Astra usw.) die konkrete Implementierung stehen.

Damit ist leider das Schreiben eines Applets, was man Programmieranfängern gern zuerst beibringen will, weil es bunt und spektakulär ist, schon ganz weit im Bereich von Objektorientierung, Vererbung und Polymorphie. Das ist das Anfänger-Problem in Java. Entweder es ist langweilig, oder man versteht es noch gar nicht. Da muss jeder durch.

Grüße
Andreas
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
Sogomn Einbinden eines Applets Java Basics - Anfänger-Themen 5
M Erste Schritte applets Java Basics - Anfänger-Themen 7
F Applets signieren. Java Basics - Anfänger-Themen 5
J Applets und getCodeBase() Java Basics - Anfänger-Themen 2
B lokales JRE bei Applets nutzen ? Java Basics - Anfänger-Themen 4
T Die Zukunft von Java Applets sicher? Java Basics - Anfänger-Themen 15
P Applets im Browser Java Basics - Anfänger-Themen 4
SheldoN Sound abspielen nach Buttonklick in Applets Java Basics - Anfänger-Themen 17
S JInternalFrame in Applets? Java Basics - Anfänger-Themen 9
K mehrer applets sollen sich gegenseitig verständigen können Java Basics - Anfänger-Themen 3
F Applets mit Appletloader in lauffähige Datei exportieren Java Basics - Anfänger-Themen 3
N Applets: unterschiedliche Java Versionen Java Basics - Anfänger-Themen 7
N Applets: Objekte vom Server laden Java Basics - Anfänger-Themen 4
L Probleme bei Offline-Nutzung von Java-Applets Java Basics - Anfänger-Themen 6
B Einfache Applets für Webseite Java Basics - Anfänger-Themen 10
M Frage zum Aufruf eines Applets aus einer HTML - Datei Java Basics - Anfänger-Themen 3
B Applets Java Basics - Anfänger-Themen 3
A java cache löschen/ausschalten bzw. Browser Applets entwickeln Java Basics - Anfänger-Themen 9
U Objekte und Applets Java Basics - Anfänger-Themen 9
Semox Fehler in Eclipse vor Start eines Applets anzeigen? Java Basics - Anfänger-Themen 2
S Wo speichere ich Bilder für Applets (Netbeans) Java Basics - Anfänger-Themen 5
A Ausdrucken eines Applets Java Basics - Anfänger-Themen 10
N Applets Java Basics - Anfänger-Themen 2
J java applets bilder? Java Basics - Anfänger-Themen 11
D Grenzen eines Applets Java Basics - Anfänger-Themen 9
Screen Eine Frage zu moueMove in applets und deren Vergleich Java Basics - Anfänger-Themen 11
F Unterschied im Einfügen von Bildern in Applets vs Applications Java Basics - Anfänger-Themen 6
S Java Applets Java Basics - Anfänger-Themen 2
Developer_X !!!Help with Applets!!! PLEASE Java Basics - Anfänger-Themen 14
0 Problem beim Starten des Applets Java Basics - Anfänger-Themen 2
M Anfängerfragen zu Java Applets Java Basics - Anfänger-Themen 4
G Speichern eines Applets (Speichern von Daten - Applikation) Java Basics - Anfänger-Themen 31
C Textausgabe auf Panelen innerhalb eines Applets Java Basics - Anfänger-Themen 6
G Weder IE noch Firefox zeigen mir Java Applets an Java Basics - Anfänger-Themen 5
Tapsi Wichtige Fragen zu Applets Java Basics - Anfänger-Themen 2
H Applets tuts nicht Java Basics - Anfänger-Themen 5
D Applets und jar Java Basics - Anfänger-Themen 6
7 Applets - einfachste Grundlagen Java Basics - Anfänger-Themen 24
M Umlaute in Java Applets? Java Basics - Anfänger-Themen 3
B Java Applets kommunizieren lassen? Java Basics - Anfänger-Themen 6
J 2 Applets zu 1 zusammenfassen? Java Basics - Anfänger-Themen 7
S applets im internet ablaufen lassen Java Basics - Anfänger-Themen 6
S MidiIN bei Applets Java Basics - Anfänger-Themen 3
B Unklarheit bei Applets und Runtime Java Basics - Anfänger-Themen 5
G Wie lass ich Applets anzeigen Java Basics - Anfänger-Themen 6
F Verwenden von Input innerhalb eines Applets Java Basics - Anfänger-Themen 3
M gehen applets auch in .jar dateien? Java Basics - Anfänger-Themen 3
S Verständnisfragen / Textausgabe (Java Applets) Java Basics - Anfänger-Themen 4
G Java Applets Java Basics - Anfänger-Themen 4
G Bilder in den Hintergrund eines Applets einfügen Java Basics - Anfänger-Themen 16
D *.mp3 in Applets nutzen Java Basics - Anfänger-Themen 23
N Thread, Applets & Co. Java Basics - Anfänger-Themen 3
A Problem beim Signieren eines Applets Java Basics - Anfänger-Themen 4
R Noch eine Frage: Breite des Applets im Browser ermitteln Java Basics - Anfänger-Themen 7
G Applets in Frames & Bilder Java Basics - Anfänger-Themen 10
MasterEvil Größe signierter Applets Java Basics - Anfänger-Themen 5
G Transparente Hintergrundfarbe eines Applets Java Basics - Anfänger-Themen 8
X Sind Traffic-Probleme durch Java Applets möglich? Java Basics - Anfänger-Themen 3
T Problem mit Objekten (bei Applets) Java Basics - Anfänger-Themen 6
D Netbeans IDE 5.0 und Applets Java Basics - Anfänger-Themen 4
J Grundsätzliche Fragen zur Anwendung von Applets Java Basics - Anfänger-Themen 12
T Fehler beim Laden eines Applets Java Basics - Anfänger-Themen 16
I Applets und Threads Java Basics - Anfänger-Themen 6
Chucky Rekursion grafisch darstellen anhand eines Applets Java Basics - Anfänger-Themen 14
J Java Applets schreiben welches JDK wählen? Java Basics - Anfänger-Themen 5
S Probleme bei Applets in HTML Java Basics - Anfänger-Themen 11
I Applets Java Basics - Anfänger-Themen 4
S Application starten / Applets + 3rd Person APIs Java Basics - Anfänger-Themen 10
F Wie kommen die Applets zum Client? Java Basics - Anfänger-Themen 7
P Lokale Dateien in Java-Applets einlesen Java Basics - Anfänger-Themen 2
P meine java applets laufen nicht bei meinen freunden Java Basics - Anfänger-Themen 5
M Java und Applets (Hilfe!!!) Java Basics - Anfänger-Themen 5
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
S awt: paint Methode zeigt nichts an Java Basics - Anfänger-Themen 9
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
S Erste Schritte drawOval Problem in Paint Anwendung Java Basics - Anfänger-Themen 1
R Begrenzer Anzahl von paint() ? Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
thet1983 start & paint Methode? Java Basics - Anfänger-Themen 0
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
M Probleme mit paint() aus java.awt.Graphics Java Basics - Anfänger-Themen 2
D Wert einer Variable in paint-Methode verwenden Java Basics - Anfänger-Themen 2
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
L Paint() wird scheinbar nicht richtig ausgeführt Java Basics - Anfänger-Themen 8
N aus Container components paint Java Basics - Anfänger-Themen 2
J paint() vs repaint() Java Basics - Anfänger-Themen 3
A Problem mit paint() Java Basics - Anfänger-Themen 2
A Aufruf der paint() Methode Java Basics - Anfänger-Themen 3
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13
J Problem mit paint(Graphics g) Java Basics - Anfänger-Themen 4
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
T paint() wird nicht aufgerufen Java Basics - Anfänger-Themen 2
K paint() mit einfügen Java Basics - Anfänger-Themen 14
K doppeltes paint beim Drucken Java Basics - Anfänger-Themen 8
J paint-methode blockiert settings von JComponents Java Basics - Anfänger-Themen 5
F Eine Frage über paint() Funktion Java Basics - Anfänger-Themen 2
S [Applet] Objekte von init bei paint benutzen Java Basics - Anfänger-Themen 9
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben