Ottimizzare paintComponent

di il
3 risposte

Ottimizzare paintComponent

Ciao a tutti, io sto creando un programma nel quale devo disegnare delle linee su un JPanel e ci disegno tramite paintComponent.
Devo fare anche delle operazioni (tipo seleziona, sposta ecc.) sulle linee quindi ad ogni movimento del mouse nel pannello, lo devo ridisegnare, ma quando sono presenti molte linee il programma tende a laggare un po'.
Come soluzione ho pensato a creare pannelli più piccoli che messi insieme formano il pannello su cui disegnare, in modo che al movimento del mouse ridisegno solo il pannello interessato.
Questa soluzione può essere corretta o ci sono alternative migliori?

3 Risposte

  • Re: Ottimizzare paintComponent

    Toro ha scritto:


    Come soluzione ho pensato a creare pannelli più piccoli che messi insieme formano il pannello su cui disegnare, in modo che al movimento del mouse ridisegno solo il pannello interessato. Questa soluzione può essere corretta o ci sono alternative migliori?
    No, NON mi pare affatto una buona soluzione. Il concetto di ridurre l'area da RIdisegnare è giusto ma si fa in altro modo.
    Innanzitutto bisognerebbe vedere esattamente il codice che hai usato per capire se è valido e se/come si può migliorare.

    Tanto per dirne una con un esempio, se hai un rettangolo rosso disegnato e l'utente chiede di ridisegnarlo in blu, tu cosa chiedi per il ridisegno? Fai un repaint() (quello SENZA argomenti)? Questo chiede il ridisegno di "tutto" quanto. Già una ottimizzazione sarebbe richiedere il ridisegno di una area più piccola con il repaint(int x, int y, int width, int height)

    Ma poi si possono studiare altre ottimizzazioni ...
  • Re: Ottimizzare paintComponent

    andbin ha scritto:


    Toro ha scritto:


    Come soluzione ho pensato a creare pannelli più piccoli che messi insieme formano il pannello su cui disegnare, in modo che al movimento del mouse ridisegno solo il pannello interessato. Questa soluzione può essere corretta o ci sono alternative migliori?
    No, NON mi pare affatto una buona soluzione. Il concetto di ridurre l'area da RIdisegnare è giusto ma si fa in altro modo.
    Innanzitutto bisognerebbe vedere esattamente il codice che hai usato per capire se è valido e se/come si può migliorare.

    Tanto per dirne una con un esempio, se hai un rettangolo rosso disegnato e l'utente chiede di ridisegnarlo in blu, tu cosa chiedi per il ridisegno? Fai un repaint() (quello SENZA argomenti)? Questo chiede il ridisegno di "tutto" quanto. Già una ottimizzazione sarebbe richiedere il ridisegno di una area più piccola con il repaint(int x, int y, int width, int height)

    Ma poi si possono studiare altre ottimizzazioni ...
    Si utilizzavo il repaint senza argomenti, ma ho provato con il repaint(int x, int y, int width, int height) ed è esattamente quello che stavo cercando.
    Grazie mille.
  • Re: Ottimizzare paintComponent

    JComponent (quindi è specifico di Swing) offre anche repaint(Rectangle r) ... se servisse.
Devi accedere o registrarti per scrivere nel forum
3 risposte