JApplet und Zeichnen

J@ckWhiteIII

Mitglied
Hallo,
ich bin mal wieder bei einem JApplet zugange. Darauf möchte ich zeichnen.
ich weiß, dass man in einem "normalen" Applet einfach die paint(Graphics g) methode nehmen kann und update(Graphics g) überschreibt.
Nun sehe ich aber bei Eclipse mir STRG und Leertaste eine paint(), eine paintAll() und eine paintComponents() methode. Man beachte das "s" am Ende der Letzteren.

Wenn ich im JApplet einfach nur paint(Graphics g) aufrufe, flackert es (sollte dabei noch normal sein). Da ich aber auch die update(Graphics g) methode überschrieben habe, um so doppelt zu buffern, frage ich mich jedoch, warum dies nicht geht.
Eventuell kann da ja jemand helfen.
Hier erst einmal mein Code:

Java:
import java.awt.*;
import javax.swing.*;

public class MainApplet extends JApplet implements Runnable {
	
	private static final long serialVersionUID = 1L;
	private Image image;
	private Graphics doubleG;
	private int p;
	
	public void init() {
		setSize(300,300);
		setFocusable(true);
		Thread t = new Thread(this);
		t.start();
	}
	
	public void start(){
		
	}
	
	public void stop(){
		
	}
	
	public void update(Graphics g) {
		if(image == null){
			image = createImage(this.getWidth(),this.getHeight());
			doubleG = image.getGraphics();
		}
		
		doubleG.setColor(getBackground());
		doubleG.fillRect(0, 0, this.getWidth(), this.getHeight());
		doubleG.setColor(getForeground());
		paint(doubleG);
		
		g.drawImage(image, 0, 0, this);
	}
	
	public void paint(Graphics g) {
		g.setColor(Color.BLACK);
		g.fillRect(0, 0, this.getWidth(), this.getHeight());
		g.setColor(Color.RED);
		g.drawString("Dies ist ein Test", p, 40);
		
	}

	public void run() {
		while (true){
			p++;
			repaint();
			
			try {
				Thread.sleep(17);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}

Achja, ich möchte kein JPanel verwenden, da ich gern irgendwelchen Komplikationen aus dem weg gehen möchte. Es wundert mich, dass in JApplet scheinbar keins eingebaut ist, obwohl in Applet ja ein Canvas ist...
 

L-ectron-X

Gesperrter Benutzer
Eigentlich braucht er diesen Tipp gar nicht. Denn in Swing sind alle GUI-Elemente bereits gepuffert. Man braucht also keinen Code für DoubleBuffering zu schreiben.

J@ckWhiteIII hat gesagt.:
Achja, ich möchte kein JPanel verwenden, da ich gern irgendwelchen Komplikationen aus dem weg gehen möchte.
Genau das ist hier nämlich der Vorwand, der dich sogar einen schwierigeren Weg suchen lässt. ;)
Wenn du etwas zeichnen möchtest, nimm bspw. ein JPanel und überschreibe die paintComponent()-Methode. Dort hinein kommt nicht das Laden der Bilder, nicht die Berechnung von Bildpositionen, kein repaint()-Aufruf etc. Nur dein Zeichencode.
Wenn du Bilder einbinden willst, kommt es auf die Komponente an, die sie anzeigen soll. Bei Komponenten wie JButton, JLabel etc. kannst du ein ImageIcon verwenden.
Hintergrundbilder kommen meist per paintComponent()-Methode auf ein JPanel.

Es kommt darauf an, was du erreichen möchtest.
 

bERt0r

Top Contributor
Oh da hier von paint überschreiben und Canvas die Rede war habe ich gedacht er wills in AWT machen, aber stimmt ja, is ein JApplet. Dadurch überschreibst du gleich 2 Methoden von denen du die Finger lassen solltest.
 

J@ckWhiteIII

Mitglied
Nun ja, das ist so: Ich hatte mir ein wundervolles Tutorial zum Thema Applets und Spiele angesehen. Da wurde IN der Applet klasse die paint() Methode überschrieben, so wie die update() Methode. Da das aber ja Alles AWT ist, fragte ich mich, ob ich dem ganzen nicht aus dem weg gehen kann, indem ich Ein JApplet nehme. Ein Applet hat ja etwas zum Zeichnen (in dem Falle ja scheinbar einen Canvas wegen paint()), da müsste ich also selbst das Flackern verhindern. Da ein JPanel ja aber eingebautes DoubleBuffering hat, dachte ich, dass ich in einem JApplet demnach eine paintComponent() Methode finden würde, für das (so dachte ich) JPanel des JApplets, welches gar nicht eingebaut werden müsse, da es schon in der JApplet Klasse vorhanden ist. Da ich kein paintComponent darin fand, war ich natürlich verwundert. ich persönlich hatte ja nur mit Swing gearbeitet und dachte mir "Na das ist ja toll, es gibt eine Swing variante des Applets. mal sehen, ob ich da nicht doppelt buffern muss!".
Und da in Applet ja scheinbar alles zum zeichnen inbegriffen ist, dachte ich, dass es bei JApplet genau so wäre. Dann hab ich mich ja scheinbar getäuscht.
 

L-ectron-X

Gesperrter Benutzer
Ein Programmierer, der in Swing seine GUIs schreibt, wird niemals direkt in einen JFrame oder JDialog zeichnen.
Das sind Toplevel-Container, in die z.B. JPanels eingefügt werden. JApplet ist auch ein Toplevel-Container. Ergo braucht dieser keine paintComponent()-Methode.
Das was du zeichnen möchtest, programmierst du in der paintComponent()-Methode eines JPanels oder einer JComponent.
 

J@ckWhiteIII

Mitglied
Vielen Dank für deine Antwort; hat mich "aufgeklärt" über mein Verständnisproblem.
Allerdings muss ich dann doch noch etwas erfragen..und zwar wenn ich nun ein JPanel erstellt habe...Dann aber Daten über das JApplet (wie z.B. die Größe) brauche..sollte ich dann echt in der JPanel klasse getter und setter machen für diese Dinge? Denn eigentlich erschwert das (aus meiner derzeitigen Sicht) ja die ganze Sache. Zum Beispiel müsste das JPanel dann ja sämtliche anderen Klassen kennen und so weiter, bzw wenn ich eine andere Klasse habe, die eine draw() methode für sich hat, um z.B. ein kleines Bild anzuzeigen, müsste dann ja dem JPanel bekannt sein. Dann werden aber doch so ziemlich Alle Objekte in der JPanel Klasse sein, oder sehe ich das falsch?
Vielleicht ist das ja sogar so üblich, und ich weiß es nur nicht, aber das Ganze macht dann doch alles viel komplizierter? D:
 

L-ectron-X

Gesperrter Benutzer
Nee, eigentlich wird dadurch alles viel übersichtlicher. Der Code wird auf mehrere Klassen und Methoden verteilt, statt alles in eine Klasse zu quetschen und 100te von Zeilen einer einzigen Klasse im Blick behalten zu müssen. Das Ganze ist dadurch leichter zu warten und wiederverwendbarer.

Das Applet selbst kann seine eigene Größe auslesen und zum Auslesen durch weitere Klassen zur Verfügung stellen. Aber auch das im Applet sitzende Panel kann seine Größe abrufen und damit die des Applets, wenn es als Hauptpanel im Applet eingebettet wurde.
JApplets haben von Hause aus das BorderLayout (mehr dazu auch in der FAQ), können also eine oder mehrere Komponenten gleichzeitig aufnehmen.

Größere GUIs bestehen auch nicht aus nur einem Panel, sie sind sehr oft verschachtelt und nutzen geschickt die Fähigkeiten verschiedener LayoutManager.
Nur Anfänger benutzen das "NullLayout", weil sie meinen, dass das einfacher sei. Als ich angefangen habe, war ich der gleichen Meinung. :bloed: ;)

Und natürlich hat immer einer "den Hut auf". ;)
Bei Einem laufen immer alle Fäden zusammen - natürlich.
Ob es nun ein Haupt-Panel oder ein Controller ist. Nur so lassen sich vernünftig objektorientierte Programme schreiben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JApplet, HTML und access denied exitVM.0 AWT, Swing, JavaFX & SWT 3
B JApplet AWT, Swing, JavaFX & SWT 2
P JApplet verhält sich im Browser anders als im Eclipse (AppletViewer) AWT, Swing, JavaFX & SWT 3
P JApplet Browser Tab Öffnen AWT, Swing, JavaFX & SWT 5
H Swing JApplet - HTML - ClassNotFoundException AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
B JApplet zwei Panels autobreite? AWT, Swing, JavaFX & SWT 2
F Applet JApplet per html einbinden - Main class kann nicht gefunden werden AWT, Swing, JavaFX & SWT 15
B Swing JTabbedPane in JApplet -> Reiter bei Aktualisation mehrmals zu sehen AWT, Swing, JavaFX & SWT 3
M JApplet mit Java 3D Komponente AWT, Swing, JavaFX & SWT 6
J JApplet langsam wegen vielen Tooltips? AWT, Swing, JavaFX & SWT 36
R JApplet, Elemente unsichtbar AWT, Swing, JavaFX & SWT 2
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
K JApplet Probleme AWT, Swing, JavaFX & SWT 5
S [JAVA] JFrame in Applet/JApplet AWT, Swing, JavaFX & SWT 14
H JApplet will sich nicht refreshen AWT, Swing, JavaFX & SWT 10
F OpenMap und Swing in JApplet AWT, Swing, JavaFX & SWT 8
S Applet JApplet Problem AWT, Swing, JavaFX & SWT 18
C Applet JApplet - Verständnissproblem AWT, Swing, JavaFX & SWT 3
H Applet JApplet soll neues Tab im Browser öffnen AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
J Swing JApplet Designfrage AWT, Swing, JavaFX & SWT 4
J JApplet schneidet Menüleiste ab AWT, Swing, JavaFX & SWT 4
D JApplet hängt im Browser fest AWT, Swing, JavaFX & SWT 5
M JFrame in JApplet einbinden AWT, Swing, JavaFX & SWT 13
Semox Swing JApplet: Problem MouseListener Anmeldung AWT, Swing, JavaFX & SWT 3
E Bild auf JApplet AWT, Swing, JavaFX & SWT 5
Semox Swing Random Checkbox JApplet AWT, Swing, JavaFX & SWT 14
A Focus für JApplet AWT, Swing, JavaFX & SWT 7
U JPanel wechsel in JApplet AWT, Swing, JavaFX & SWT 14
J AWT JApplet lädt Bild nicht hoch AWT, Swing, JavaFX & SWT 7
R JApplet - Infos ueber Browser moeglich? AWT, Swing, JavaFX & SWT 5
V Kein Fokus für Key Bindings auf JPanel bzw JApplet AWT, Swing, JavaFX & SWT 2
S StackOverflowError bei MouseWheelListener für JApplet AWT, Swing, JavaFX & SWT 5
G JFrame in JApplet AWT, Swing, JavaFX & SWT 6
M Daten speichern mit JApplet AWT, Swing, JavaFX & SWT 9
lukas24680 JApplet und getContentPane() AWT, Swing, JavaFX & SWT 8
G paintComponent JPanel im JApplet AWT, Swing, JavaFX & SWT 2
S Alternative zu paint in JApplet AWT, Swing, JavaFX & SWT 3
R Im JFrame ein JApplet zum öffnen einer Url benutzen AWT, Swing, JavaFX & SWT 22
H JApplet fehler objekte unsichtbar. AWT, Swing, JavaFX & SWT 2
C Swing-JApplet AWT, Swing, JavaFX & SWT 3
B JDialog in JApplet AWT, Swing, JavaFX & SWT 3
P Image in JApplet geht nicht AWT, Swing, JavaFX & SWT 2
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
G Dreieck aus Pixeln zeichnen AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
Z Swing Graph zeichnen lassen AWT, Swing, JavaFX & SWT 16
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
L Swing zeichnen AWT, Swing, JavaFX & SWT 14
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
L Swing Ein Rechteck in ein Grid Zeichnen AWT, Swing, JavaFX & SWT 5
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
Soloeco Graph zeichnen AWT, Swing, JavaFX & SWT 1
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Quadrat, Rechteck zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
A Swing JRadioButton zeichnen nicht AWT, Swing, JavaFX & SWT 4
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
L JavaFX JavafX Timelime zeichnen und schön stylen? AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
I Spielsteine zeichnen und entfernen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben