Avatar billede Simon Praktikant
18. august 2005 - 13:33 Der er 4 kommentarer og
1 løsning

Grafiske komponenter bliver ikke opdateret

Mit problem er at de grafiske komponenter ikke bliver opdateret i min applet.

Jeg har to klasser:
Klassen ParameterObserver som er en applet (og min brugerflade).
klassen ParameterTransfer, som forespørger og modtager data eksternt fra.

Metoden ParameterTransfer.GetLogDataString(...) tager imod data i en loop.
For hver gang der loopes skal de modtagne data tegnes på min applet. Dette gør jeg ved at kalde

-------------------------------------
ActionEvent someDataReadyEvent = new ActionEvent(SomeDataReadyListener, 0, "some_data_ready");
SomeDataReadyListener.actionPerformed( someDataReadyEvent);
-------------------------------------

fra mit loop.

I klassen ParameterObserver har jeg så implementeret nedenstående metode til at tage imod data, og tegne dem med Chart.



public void actionPerformed(ActionEvent e)
{
    // tegn data på brugerfladen
    this.remove(mychart);                  // eksisterende graf fjernes
    mychart = new Chart(modtagne_data);    // nyt graf objekt oprettet, og modtagne data indsættes som parameter
    add(mychart);                          // min graf tilføjes brugerfladen

    mychart.setBounds(chartleft,chartup, chartwidth, chartheight);  // størrelsen og placeringen sættes
    mychart.repaint();                      // grafen opdateres
 
    this.repaint();                        // hele min applet opdateres
   

}

...MEN mychart BLIVER IKKE TEGNET :-(

Ved at bruge debuggeren har jeg fundet ud af at:
actionPerformed(...) bliver kaldt.
modtagne data er korrekt.
der sker ingen exceptions, dvs at al koden bliver eksekveret.

Jeg har prøvet at vise en dialog-box (se nedenfor) til sidst, og hver gang BLIVER MYCHART OPDATERET.
Måske gør dette kald noget for at opdatere som jeg mangler????
-------------------------------------
JOptionPane.showMessageDialog(new JFrame(), "test", "test", JOptionPane.INFORMATION_MESSAGE);
-------------------------------------
Avatar billede arne_v Ekspert
18. august 2005 - 18:21 #1
har du prøvet at kalde validate ?
Avatar billede Simon Praktikant
19. august 2005 - 09:14 #2
Ja, nu har jeg også prøvet at kalde this.validate(); og mychart.validate(); men ingen af delene virker. Det er som om billedet er låst, indtil alle data er blevet hentet.
Avatar billede arne_v Ekspert
19. august 2005 - 09:28 #3
henter du data i actionPerformed ?

hvis ja og det tager lang tid så skal du starte en seperat tråd til det !
Avatar billede Simon Praktikant
19. august 2005 - 09:39 #4
Nej, jeg henter ikke data i actionPerformed.

Jeg bruger metoden ParameterTransfer.GetLogDataString(...){..} til at hente data eksternt fra, vha en løkke. Når alle data er hentet returneres data, og overføres til Charts konstruktør som parameter.
Nu er det så blot at mit program ikke kun skal kunne tegne grafen når ALLE data er kommet, men gradvist som der kommer data ind. Da klassen ParameterTransfer ikke kender til min brugerflade får jeg den til at sende en action til klassen ParameterObserver, og denne håndteres i actionPerformed. Det er så actionPerformed's opgave gradvist at tegne de data der er kommet.
Avatar billede Simon Praktikant
16. august 2006 - 09:48 #5
lukker spørgsmål
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester