repaint(); i Java

Tags:    java

Jeg har nu siddet og bakset med Java's paint funktioner. Det skal gerne ende ud i et spil, men lige nu er det hele lidt på forsøgs stadiet.

Jeg har lavet en klasse, der først og fremmest tegner en firkant. Det virker fint! Klassen har en knap, og denne knap har en actionlistener, der ændrer i y-værdien for firkanten for derefter at køre repaint() metoden.

Problemet er, at firkanten, samtidig med at den rykker sig, bliver på sin plads - den er først rigtig opdateret når jeg minimerer vinduet, og åbner det igen. Kender i til det problem?

I kan se koden her:

Fold kodeboks ind/udKode 


Jeg har valgt at tage hele koden med, da jeg ikke er sikker på hvor problemet er. Håber i kan overleve den relative lange post ;)



Indlæg senest redigeret d. 17.10.2006 00:51 af Bruger #10415
2 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Du glemmer at rydde baggrunden når du tegner.

Hvis du i paintComponent(...) overskriver baggrunden først, er dit problem løst.
Det er grunden til at du ser et "spøgelse" inden at du minimere vinduet.

Fold kodeboks ind/udKode 


Det giver dog lidt problemer med performance når der skal gentegnes større flader, med flere elementer osv. Men her, virker det. (søg eventuelt lidt om dirty rectangles på google, så kan du optimere det mere.)

Hvis du også bare tegner på et billede først, så tegner det billede hen på din component, vil det også give en bedre performance. Men leg lidt med det, og se hvad der sker.



Indlæg senest redigeret d. 18.10.2006 09:17 af Bruger #2796
Hmm ja... Kan godt se dit princip. Men nu tegner den jo først en stor sort firkant og derefter en lille - med samme farve. Hvordan får jeg firkanten, der rydder baggrunden til at blive hvid?

Jeg prøver lige at søge efter dirty rectangles nu jeg er igang ;)

EDIT: Jeg fandt ud af at variablen g kunne bruge metoden setColor. Og så var det jo ikke så svært ;)

Tak for hjælpen!



Indlæg senest redigeret d. 20.10.2006 11:58 af Bruger #10415
t