Der er en enkelt ting ved repaint jeg ikke forstaar. Man kan kalde en repaint(int x,int y,int Width,int Height) hvor man angiver hvilke del af dette Component man gerne vil have gentegnet. Men I manualen til repaint staar: \"This method causes a call to this component\'s update method as soon as possible.\"
Men den eneste update method man kan kalde tager ingen argumenter om nogle størelse, saa hvilken ide kunne den vaere i at angive kordinater til repaint, naar den alligevel ikke kan give dem videre til update.
Hvordan repaint foregår afhængiger af om vi snakker om Swing eller AWT komponenter.
Hvis vi snakker om Swing så forholder det sig således. Repaint bruger en javax.swing.RepaintManager som tegner komponenten op på ny (eller dele af den hvis det er det man ønsker). update bliver ikke kaldt, men det er tilfældet for AWT komponenter.
Jeg vil tro det forholder sig således med repaint i AWT.
Jeg tror der bruges clipping. update tager jo et Graphics objekt (som det giver videre til paint metoden) og på et Graphics objekt kan man sætte clipping området. Dvs. det område hvor \"tegning\" er tilladt. Alt \"tegning\" udenfor clipping området bliver ignoreret. Så jeg tror koordinaterne som gives med til repaint benyttes til at sætte clipping området.
Det kan også være at member variable bliver brugt til at holde styr på området der skal tegnes op. Du skal huske at repaint og update ligger i samme klasse så paramteroverførsel til update fra repaint er overflødig.
Det er rigtigt at det er clipping området der angives. Når man kalder repaint() metoden, sker der det at GUI tråden kalder update(Graphics g) metoden som tager et Graphics objekt, dette objekt bliver overført automatisk. Update metoden gør det at den først slette det område der er angivet som parameter fra repaint. Derefter kalder den paint() metoden med det samme Graphics objekt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.