InvaldiateRect(c++) -> Java?



  • Hi,
    ich brauche eine funktion, mit der ich im meinem Applet einen kleinen Bereich neu zeichnen lasse. In C++ heißte diese Funktion InvaldiateRect. Mache ich das vielleicht mit repaint(????) oder update(???). Es wäre cool wenn mir jemand helfen könnte!!

    Danke



  • In C++ gibt es keine Funktion namens InvalidateRect. Die heisst in der WinAPI so.



  • Ist sowas in Java überhaupt notwendig?
    mach doch einfach kurz
    hide() -> show() dann wirds aber komplett neugezeichnet und is wohl ein bischen dirty 😃

    [ Dieser Beitrag wurde am 27.04.2003 um 15:11 Uhr von Lars editiert. ]



  • Warum denn so kompliziet. Jede Component in Java hat eine Methode invalidate, die die Komponente auffordert, sich wieder gültig darzustellen. Also genau das Java-Äquivalent zu InvalidateRect, nur dass man keinen Bereich angeben kann.



  • Tja n bischen in der Window Klasse gestöber und die vererbten Methoden und das gefunden, bitte sehr: http://java.sun.com/j2se/1.4.1/docs/api/java/awt/Component.html#repaint(int,%20int,%20int,%20int)

    [ Dieser Beitrag wurde am 27.04.2003 um 15:19 Uhr von Lars editiert. ]



  • Hi, ich geh mal davon aus, daß du Animationen oder sowas machen willst und nur den notwendigen Teil des Bildschirms neu zeichnen willst , damit's nicht flackert..

    sowas kann man sich recht leicht selber bauen , im AWT kann man das zB so machen:

    repaint() ruft standardmäßig update(Graphics g) auf. Dort wird die gesamte Fläche deines Applets oder whatever mit der Hintergrundfarbe übermalt und dann wird paint(g) aufgerufen..so wenn du jetzt nur einen bestimmten rechteckigen Teil des Screens neuzeichnen willst, kannst du public void update(Graphics g) überschreiben und zwar so daß nur ein bestimmter rechteckiger Teil den du zB in Form einer Instanzvariable festhälst, mit dem Hintergrund übbermalt wird und dann kann man noch den Clipping-Bereich für Grafikoperationen auf dieses Rechteck setzen..mit einer Methode repeaintRect(Rectangle rect) etc. kann man dann erst die Instanzvariable des Rechtecks verändern und dann repaint() aufrufen...hier mal bissel Beispiel-Code:

    private Rectangle rect=new Rectangle();
    
    public  void repaintRect(Rectangle r)
    {
        rect=new Rectangle(r);
        repaint();      
    }
    
    public void update(Graphics g)
    {
         g.setColor(this.getBackground());
         g.fillRect(rect.x,rect.y,rect.width,rect.height);
         g.setClip(rect.x,rect.y,rect.width,rect.height);   
         paint(g);
    }
    
    public void paint(Graphics g)
    {
       //hier deine Zeichenoprerationen
    }
    

    anstatt InvalidateRect kannst du dann also repaintRect verwenden

    [ Dieser Beitrag wurde am 27.04.2003 um 17:02 Uhr von crass editiert. ]



  • Wofür gibs dann extra ne repaint Methode mit nem Rect als Parameter, wenn eh alles neu gezeichnet wird?



  • oh, wußt ich nimma 😃 na dann kann man sich das natürlich sparen:-)



  • Original erstellt von crass:
    oh, wußt ich nimma 😃 na dann kann man sich das natürlich sparen:-)

    axo ich hab dein post so verstanden das bei repaint immer alles neugezeichnet wird egal bei welcher methode. war ein gegenseitiges missverständnis 😃



  • ja, das nächste mal bevor ich hier größere Beiträge produziere schau ich lieber besser mal nach welche Methoden nicht schon alle vorhanden sind 😉 trotdem könnte man es wenn mans gern bissel umständlich macht auch so machen wie oben erwähnt 🙂



  • ich habs mit der überschreibung von der update-funktion ausprobiert. klappt alles super

    Danke


Anmelden zum Antworten