paint() wird nicht aufgerufen

  • Themenstarter Themenstarter Timeeeh
  • Beginndatum Beginndatum
T

Timeeeh

Gast
Hallo!

Folgende Situation:
Ich kann leider nur begrenzt Code posten, weil ich Teile nur als .class Datei habe. Aber es müsste etwa folgendermaßen aussehen.

Java:
public class GSystem extends Frame implements MouseListener, MouseMotionListener {
 
     Graphics graphics;

     public final void paint(Graphics param)
    {
         this.graphics = param;

         doThePainting();

         paramGraphics = null;
     }
....
     public final void drawLine(int i1, int i2, int i3, int i4)
    {
         if (this.graphics != null) this.graphics.drawLine(i1, i2, i3, i4);
     }   
}

Nun habe ich eine Klasse geschrieben, die GSystem erweitert und "doThePainting()" implementiert.
Die Klasse heißt jetzt mal WSystem und wird wie folgt aufgerufen:
Java:
public static void main(String args[]){
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		WSystem wSystem = new WSystem((int)dim.getWidth(),(int)dim.getHeight());
	}

Problem ist nun, dass paint() bzw meine doThePainting() gar nicht aufgerufen wird. Wenn ich doThePainting einfach manuell aufrufe und dort zB eine Linie zeichnen möchte, passiert natürlich auch nichts, weil das Graphics Objekt wohl nicht gesetzt ist.
Ist das so erkennbar, warum das vielleicht nicht klappt? Braucht ihr noch weitere Informationen?
(teste gerade auf einem Win7 Rechner)


Ich hoffe jemand hilft mir bei meinem Problem!
Danke Timeeeh!
 
Hallo Simon_Flagg!

Sorry, die erste Klasse (GSystem) kann ich leider nicht abändern - war also auch nicht meine Idee
ein graphic zu speichern.
Alles andere aber. Irgendwie muss es auch so gehen 🙂
 
nein, ich rufe sie nicht auf. Aber sie müsste doch eigentlich von selbst aufgerufen werden, wenn sich der Frame neu
zeichnen muss.
Ja, der Frame wird im Konstruktor folgendermaßen gesetzt:
Java:
    this.graphics = null;

    setSize(i1, i2);  //<- parameter des konstruktors
    setResizable(false);
    setLayout(null);
    setVisible(true);

    addMouseListener(this);
    addMouseMotionListener(this);
 
angezeigt wird doch etwas oder?
probier mal ein repaint...

ich könnte mir eigentlich nur vorstellen, dass die Methode eine falsche ID hat.... und deshalb nicht vom EDT aufgerufen wird......

lg
 
Hallo,

ja, es wird ein komplett weißes Fenster erstellt.
Wenn ich aber in meine doThePainting() Methode ein println() mache,
wird dieses nie aufgerufen.

Wenn ich repaint mache, passiert leider auch nichts.

Java:
wSystem.repaint();

habe ich jetzt noch in der main hinzugefügt.
Der Text im println in meiner doThePainting() Methode (die ja von paint() aufgerufen wird)
wird jedoch nicht angezeigt.

Was für eine ID?
Wir setzen eine ID oben in unserem wSystem mit:
private static final long serialVersionUID = 1L;
 
mit ID hab ich gemeint, ob alle identifier und parameter und so bei der paint-Methode passen.... Funktioniert das ganze eig wenn du ein Objekt der Klasse GSystem machst?

lg

ps: was stören KÖNNTE, was du aber nicht ändern kannst: in GSystem-Paint fehlt der Aufruf der Methode der Superklasse...
 
Hallo Timeeeh,

dass die Paint-Methode selbst nicht aufgerufen wird bezweifle ich erst mal. Oder hast Du das auch getestet?
Bei mir funktioniert das mit dem Überschreiben tadellos. Da Du die wichtigen Code-Stellen nicht zeigst,
kann man nur raten. Mögliche Ursachen wären:

- bei Überschreiben von doThePainting() im Funktionsnamen einen Tippfehler
- dabei Groß-/Kleinschreibung missachtet
- bei der Implementation von doThePainting() andere Parameter oder Rückgabewerte als in der Superklasse definiert

Das Speichern des Graphics-Objektes funktioniert hier zwar, ich würde es aber lieber doThePainting() als Parameter
übergeben.

Ich hoffe, das hilft Dir weiter.

VG ROlf
 

Neue Themen


Zurück
Oben