canvas zeig nach repaint nichts an

  • Themenstarter Themenstarter kaetzacoatl
  • Beginndatum Beginndatum
K

kaetzacoatl

Gast
Hallo,
ich zeige eine Unterklass von Canvas in einem JFrame an.
Wenn ich die repaint() Methode aufrufe wird jedoch immer noch das selbe angezeigt.
Wie kann ich herausfinden warum nichts angezeigt wird?

Hier noch ein bisschen Code:
Java:
package planeten.anzeige;

import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;

public class Diagramm extends Canvas {
	private static final long serialVersionUID = 4813281131848889807L;
	private Point a = new Point(0,0);
	private Point b = new Point(0,0);
	Image img;

	public void zeichne(Point a, Point b) {
		this.a = a;
		this.b = b;
		repaint();
	}

	@Override
	public void paint(Graphics arg0) {}

	@Override
	public void update(Graphics g) {
		if(img == null)img = createImage(getWidth(), getHeight());
		img.getGraphics().drawLine((int) a.x,(int) a.y,(int) b.x,(int) b.y);
		g.drawImage(img, 0, 0, null);
	}

}
 
[JAPI]Canvas[/JAPI] <- [noparse][JAPI]Canvas[/JAPI][/noparse]
then completely redrawn by calling this canvas's paint method
Also alles was zeichnet in die
Code:
paint(Graphics g)
Methode reinpacken.

-Luk10-
 
Zuletzt bearbeitet von einem Moderator:
Ich hab jetzt alles in die paint() Methode geschrieben, aber das geht auch nicht.

@Marco13: Gibt es so etwas wie ein JCanvas?
 
Eine JComponent (bzw. ein JPanel) kann wie ein "JCanvas" verwendet werden. Genau wie ein Canvas nicht viel mehr als eine Component ist. Das macht ja nichts, außer die Methode paint bzw. paintComponent zum Überschreiben anzubieten. Schau dir den geposteten Link an.
 
Mit dem Code bekomm ich nur eine Kopie meines Frames angezeigt.
Java:
package planeten.anzeige;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;

import javax.swing.*;

public class Diagramm extends JPanel {
	private static final long serialVersionUID = 4813281131848889807L;
	private Point a = new Point(0,0);
	private Point b = new Point(0,0);
	Image img;

	public void zeichne(Point a, Point b) {
		this.a = a;
		this.b = b;
		repaint();
	}

	@Override
	public void paint(Graphics arg0) {}

	@Override
	public void paintComponent(Graphics g) {
		if(img == null)img = createImage(getWidth(), getHeight());
		img.getGraphics().drawLine((int) a.x,(int) a.y,(int) b.x,(int) b.y);
		g.drawImage(img, 0, 0, null);
	}

}
Wenn ich ein JComponent verwende passier wie beim Canvas nichts.
 
Wenn ich ein JComponent verwende passier wie beim Canvas nichts.
Die erste Zeile in der paintComponent()-Methode sollte immer
Code:
super.paintComponent(g);
sein
Entferne die Zeilen 21 und 22.
paint() soll nicht überschrieben werden!

Deine paintComponent()-Methode kann so aussehen:
Java:
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(a.x, a.y, b.x, b.y);
    }

Schau dir den geposteten Link an.
:exclaim:
 
Ich hab das ganze jetzt in ein JApplet eingebunden.
Jetzt funktioniert es wunderbar, warum wei? ich zwar nbicht aber hauptsache es klappt.
 

Zurück
Oben