/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
scrollbars og gentegning
Fra : Peter T. Nielsen


Dato : 14-11-01 16:14

Hej!

Jeg har lavet mit eget panel som extends JPanel. På det panel tegner jeg
bl.a. et koordinatsystem vha. paint-metoden og Graphics2D. Panelet ligger
jeg så på/i en JScrollPane og scrollbarerne kommer fint frem.
Problemet er at når jeg bruger scrollbarerne bliver koordinatsystemet(og
andet der bliver tegnet på det panel) tegnet fuldstændigt underligt igen.
Dvs. som om man har skubbet og tværet det tegnede.

Et andet sted i framen har jeg en knap som bl.a. gentegner hele JFramen og
så står alt i JScrollPane som det skal!

Jeg tænkte så at jeg kunne finde en event der blev triggert når der blev
scrollet og så gentegne hele framen, men jeg kan ikke finde en sådan.

Desuden har jeg prøvet at lave min egen scrollPane som extendede
JScrollPane og overskrive dens paint metode til at gentegne hele framen,
men det har ikke rigtig nogen effekt...

Er der nogen der ved om der er en event når man scroller eller kan komme på
en anden måde at få gentegnet framen? En helt tredje løsning er også
velkommen...

Tak for hjælpen
Peter

 
 
Jacob Nordfalk (15-11-2001)
Kommentar
Fra : Jacob Nordfalk


Dato : 15-11-01 08:12

"Peter T. Nielsen" wrote:

> Hej!
>
> Jeg har lavet mit eget panel som extends JPanel. På det panel tegner jeg
> bl.a. et koordinatsystem vha. paint-metoden og Graphics2D. Panelet ligger
> jeg så på/i en JScrollPane og scrollbarerne kommer fint frem.
> Problemet er at når jeg bruger scrollbarerne bliver koordinatsystemet(og
> andet der bliver tegnet på det panel) tegnet fuldstændigt underligt igen.
> Dvs. som om man har skubbet og tværet det tegnede.

Prøv at lægge din tegning i paintComponents() i stedet for paint()
(så får du også automatisk dobbelt buffering i komponenten, hvis
det er slået til)

Kalder du selv paint() eller kalder du repaint() og lader systemet om at
kalder paint()?
Det første går ikke altid godt hvis det det ikke er GUI-tråden
der gør det (hvis du bruger flere tråde i dit program)


> Et andet sted i framen har jeg en knap som bl.a. gentegner hele JFramen og
> så står alt i JScrollPane som det skal!
>
> Jeg tænkte så at jeg kunne finde en event der blev triggert når der blev
> scrollet og så gentegne hele framen, men jeg kan ikke finde en sådan.

Prøv at lytte efter Adjustment-hændelser på hver af scrollbarerne:
getVerticalScrollBar().addAdjustmentListener()



> Desuden har jeg prøvet at lave min egen scrollPane som extendede
> JScrollPane og overskrive dens paint metode til at gentegne hele framen,
> men det har ikke rigtig nogen effekt...

Det tror jeg ikke er nogen god ide. Det er bedre at arve fra JPanel eller
JComponent og definere dens paintComponent()-metode.


> Er der nogen der ved om der er en event når man scroller eller kan komme på
> en anden måde at få gentegnet framen? En helt tredje løsning er også
> velkommen...

Du kunne eventuelt lægge din kode et sted så vi kunne hente den og selv
se (og rette) problemet.


--
Jacob Nordfalk

Peter T. Nielsen (15-11-2001)
Kommentar
Fra : Peter T. Nielsen


Dato : 15-11-01 12:08

Jacob Nordfalk <nordfalk@mobilixnet.dk> wrote

> "Peter T. Nielsen" wrote:
>
>> Hej!
>>
>> Jeg har lavet mit eget panel som extends JPanel. På det panel tegner
>> jeg bl.a. et koordinatsystem vha. paint-metoden og Graphics2D. Panelet
>> ligger jeg så på/i en JScrollPane og scrollbarerne kommer fint frem.
>> Problemet er at når jeg bruger scrollbarerne bliver
>> koordinatsystemet(og andet der bliver tegnet på det panel) tegnet
>> fuldstændigt underligt igen. Dvs. som om man har skubbet og tværet det
>> tegnede.
>
> Prøv at lægge din tegning i paintComponents() i stedet for paint()
> (så får du også automatisk dobbelt buffering i komponenten, hvis
> det er slået til)
>

Jeg prøvede at lave min paint metode om til paintComponents(), men det
hjælp ikke på problemet.

> Kalder du selv paint() eller kalder du repaint() og lader systemet om
> at kalder paint()?
> Det første går ikke altid godt hvis det det ikke er GUI-tråden
> der gør det (hvis du bruger flere tråde i dit program)

I forbindelse med scrollbaren kalder jeg hverken paint eller repaint! Det
skulle scrollbaren da gerne selv klare?!

>
>
>> Et andet sted i framen har jeg en knap som bl.a. gentegner hele
>> JFramen og så står alt i JScrollPane som det skal!
>>
>> Jeg tænkte så at jeg kunne finde en event der blev triggert når der
>> blev scrollet og så gentegne hele framen, men jeg kan ikke finde en
>> sådan.
>
> Prøv at lytte efter Adjustment-hændelser på hver af scrollbarerne:
> getVerticalScrollBar().addAdjustmentListener()
>

Her fik jeg succes Jeg har lavet en event der simpelthent tegner hele
framen igen vha. et repaint() kald. Køn kode er det ikke, men det virker!

scrollPane.getHorizontalScrollBar().addAdjustmentListener(
   new AdjustmentListener() {
      public void adjustmentValueChanged(AdjustmentEvent ae) {
       repaint();
      }
   });

Tak for hjælpen
/Peter

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408927
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste