Announcement

Collapse
No announcement yet.

Zugriff von außen auf repaint() ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff von außen auf repaint() ?

    Hallo,
    ich rufe repaint() der Klasse Fabric aus einer anderen Klasse und nicht in der Klasse Fabric selbst,
    wo paint() dort vorliegt. Es funktionieret leider aber nicht.
    Wenn ich aber das Fenster minimiere/maximiere dann wird alles
    neu gezeichnet!
    Kann jemand mir n Tipp geben wie, zur Laufzeit repaint() einer anderen Klasse aufgerufen wird.
    Danke für eure Hilfe
    <pre>

    class Fabric extends Canvas
    {
    public Graphics g;
    public Fabric( )
    {
    setVisible(true);
    }

    public void update(Graphics g)
    {
    super.update(g);
    paint(g);
    System.out.println("update-Aufruf");
    }
    public void paint ( Graphics g )
    {
    if (spielStart ==true) //spielStart ist statische Variable
    //die durch Klasse xyx (auf Buttondruck) auf true gesetzt wird.
    // Danach wird repaint() aufgerufen, was aber nicht gelingt!!
    {
    for (int i = 0; i < 2; ++i )
    {
    g.drawString(" Spiel beginnt", 2,50);

    }
    }
    else
    {
    g.drawString(" Das Spiel ist beendet", 2,50);
    }

    }
    }

    </pre>

  • #2
    Hi!

    Normalerweise kann man revalidate()/validate() rufen, was indirekt von jeder Komponente die paint(...) bzw. paintComponent(...) aufruft.

    Schoener waehre es aber vielleicht, beide Klassen per Listener-interface zu connecten und sich ueber das interface zu synchronisieren ....

    HTH Rocc

    Comment


    • #3
      hi,
      was meinst du bitte mit 'per Listener-interface connecten', ich habae auf der Klasse Fabrik auch ein Listener.Außerdem habe gerade festgestellt, dass aus der Klasse Fabric kein Zugriff auf einem anderen Panel möglich ist.
      z.B., wenn ich versuche in einem Textfeld auf n Panel zu schreiben??(Fehlermeldungen sind auch nicht dabei).
      Die gliche Methode funktioniert dagegen wenn ich sie aus einer anderen Klasse (z. B. ein JPanel)aufrufe!

      Comment


      • #4
        1. zum thema connecten: es macht meisst nicht viel sinn, das sich zwei klassen kennen muessen, um bei sich gegenseitig irgendwelche methoden aufzurufen. (kommt irgendwann mal ein dritte klasse, mit identischer eigenschaft, muessen sich dann drei klassen kennen und manuell updaten(also ihre methdoen aufrufen).

        eine alternative hierfuer bietet ein ChangeListener oder PropertyChangeListener interface, wo sich alle drei klassen als listener anmelden und den dortigen zustand uebernehmen bzw. updaten.

        somit muessen alle drei klassen nur noch eine klasse kennen (die welche die events herausschickt).

        2. was fuer einen listener hasst du denn auf dem Canvas (was ich gerne vermeide und stattdessen JPanel verwende) laufen ?

        3. solche zugriffe erreicht man zum beispiel ueber ein listener-interface.

        HTH Rocc

        Comment


        • #5
          ich verwende Canvas, weil ich einige Bilder
          auf das Feld darstellen möchte. Mit Panels wird die Szene vermischt...
          (Die Bilder werden per Maus angeklicket.)
          Die Implementierung von MouseListener auf Canvas
          funktionierte nicht(Erreignisse werden nicht empfangen), deswegen habe ich den
          enableEvents (AWTEvent.MOUSE_EVENT_MASK);
          ALs Listener genommen.
          wie verwende ich die Listener, die du gennant hast um diese Update durchzuführen.
          Außer meinem Canvas und das Hauptfenster
          sind die anderen Klassen gar keine Objekte
          der Klasse Component ?!
          Kannst du bitte mit einem einfachen Beispiel
          ,so dass ich auch verstehen kann, dies erleutern?
          dank

          Comment


          • #6
            ich verwende Canvas, weil ich einige Bilder auf das Feld darstellen möchte. Mit Panels wird die Szene vermischt... (Die Bilder werden per Maus angeklicket.) Dort wo Cnvas vorliegt, werden Variable auf denen Paint() (von Canvas )zugriff hat von außen geändert (durch xyx -Klasse) und schließlich repaint aufgerufen(was aber nicht gelingt)
            Die Implementierung von MouseListener auf Canvas funktionierte nicht(Erreignisse werden nicht empfangen), deswegen habe ich den enableEvents (AWTEvent.MOUSE_EVENT_MASK); ALs Listener genommen. wie verwende ich die Listener, die du gennant hast um diese Update durchzuführen. Außer meinem Canvas und das Hauptfenster sind die anderen Klassen gar keine Objekte der Klasse Component ?! Kannst du bitte mit einem einfachen Beispiel ,so dass ich auch verstehen kann, dies erleutern?

            dank

            Comment

            Working...
            X