Dmitri Rettig: Darf die paint()-Methode im Canvas nicht aufrufen [die x-te]

Hallo,

vielleicht wird sich so eine ähnliche Nachricht nocheinmal finden. Ich habe gerade eine Fehlermeldung angezeigt gekriegt, weil ich angeblich zweimal auf "Abschicken" gedrückt habe. Die Nachricht ist aber gar nicht im Forum.

Das ist mein Problem

import ...;

public class Hauptklasse extends JFrame implements ActionListener
{
   JButton UpdateButton;
   MeinCanvas ZeichenCanvas;

// Konstruktor
   Hauptklasse()
   {
      // Erzeugen von Komponenten, Hinzufügen von ActionListenern usw.
      ...
      UpdateButton.addActionListener(this);
   }

public void actionPerformed(ActionEvent ae)
   {
      Object quelle = ae.getSource();

if (ae == UpdateButton) ZeichenCanvas.repaint(); // Hier sitzt der Wurm
   }
}

Hier ist die von Canvas abgeleitete Klasse MeinCanvas

import ...

public class MeinCanvas extends Canvas
{
   // Konstruktor
   ...

// Überschreiben der paint()-Methode
   // Andere, neue Methoden
}

Bis ich ZeichenCanvas.repaint() aufrufte, funktionierte alles wie ich es wollte [ausser einigen Problemen mit der Anordnung der Komponenten und den Menüs, wie man es dem vorigen Eintrag von mir entnehmen kann]. Der Compiler meldet mir: non-static method repaint() kann nicht von einem statischen Block nicht referenziert werden. Wie soll ich denn sonst das Canvas dazu veranlassen, nach der Betätigung meines JButtons die paint()-Methode bitte aufzurufen.

Dane schön für die vielen, zahlreichen und vor allem Informativen Antworten.

MfG Dmitri

[und jetzt kopiere ich den Text in die Zwischenablage]

  1. hi

    meine Vermutung:

    Vielleicht ZeichenCanvas.update();  //reine Vermutung :-)

    greets tOM

    1. Hi,

      meine Vermutung:

      Vielleicht ZeichenCanvas.update();  //reine Vermutung :-)

      Diese Vermutung hatte ich auch. Es scheitert aber an:

      1. diese Methode gibt es nicht, es gibt nur ZeichenCanvas.update(Graphics g) [so genau bin ich]

      2. diese Methode wird von repaint() automatisch aufgerufen.

      3. es kommt die gleiche Fehlermeldung, da es ja heisst: public void update(Graphics g), ebenso wie public void repaint() ... und diese Methode darf nicht refferenziert werden.

      Trotzdem, vielen Dank, dass du es wenigstens versucht hast. Damit lässt du den Thread länger leben ;-)

      MfG Dmitri

        1. diese Methode gibt es nicht, es gibt nur ZeichenCanvas.update(Graphics g) [so genau bin ich]

        ok ok g

        1. diese Methode wird von repaint() automatisch aufgerufen.

        logo

        1. es kommt die gleiche Fehlermeldung, da es ja heisst: public void update(Graphics g), ebenso wie public void repaint() ... und diese Methode darf nicht refferenziert werden.

        mhh...

        ok machen wir es kompliziert:

        du schreibst dir einfach eine Funktion die update() aufruft, und DIe rufst du auf - geht das?

        Trotzdem, vielen Dank, dass du es wenigstens versucht hast. Damit lässt du den Thread länger leben ;-)

        bitte g

        MfG Dmitri

        greets tOM

        1. Hi,

          ok machen wir es kompliziert:

          du schreibst dir einfach eine Funktion die update() aufruft, und DIe rufst du auf - geht das?

          Meinst du in MeinCanvas? Ja, es geht, aber: die Methode darf nicht statisch sein, sonst kommt wieder diese Fehlermeldung mit "non-statische methode darf nicht referenziert werden usw." beim Kompillieren von MeinCanvas, und wenn die Methode nicht statisch ist, und von der Hauptklasse aufgerufen wird, dann kommt diese oben genannte Fehlermeldung beim Kompillieren der Hauptklasse.

          Habe alles schon versucht ...

          Puh!

          MfG Dmitri