IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

Debutant SWT : comment faire un auto refresh d'un canvas ?


Sujet :

SWT/JFace Java

  1. #1
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Debutant SWT : comment faire un auto refresh d'un canvas ?
    Salut,

    Je démarre sur SWT, et je voudrais le tester avec une appli graphique toute simple:
    Deux threads, l'une fait des calculs (disons des coordonnées de points, calcul de fractales par ex), et l'autre, la fameuse UI-thread.

    J'ai bien compris le coup des Event/Listener, et celui du display.asyncExec, mais j'ai l'impression qu'il me manque encore qqchose..

    Dans mon cas, je voudrais un rafraichissement automatique du canvas.
    Les coordonnes des points sont mis à jours en live, et je souhaite que l'UI me montre l'evolution. Sauf que je ne vois pas comment générer des PaintEvent en boucle.. (car il me semble que je ne peux rien afficher si ca n'est pas la consequence d'un event..)

    Y a t'il moyen de faire des postEvent (il parait que oui pour la souris, mais déconseillé), ou alors existe-t-il une autre technique toute simple que j'ai pas vu ? Est-on obligé de passer par des events ?
    Est-ce que SWT n'est pas fait pour ce genre de cas ?

    merci de votre aide !

  2. #2
    Membre confirmé Avatar de desert
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 414
    Points : 479
    Points
    479
    Par défaut
    Si c'est pour dessiner au fur et à mesure dans un Canvas, oui, tu es obligé de passer par un évènement.
    Pour rafraîchir le Canvas, il y a la méthode redraw().
    Je ne sais pas comment tu procèdes mais ce que je ferais: tu récupères tes coordonnées de point et tu alimentes un tableau de points par exemple.
    A chaque récupération, tu fais appel à la méthode redraw() de Canvas qui va redessiner tous les points en fonction du tableau alimenté.
    Ce n'est peut-être pas la bonne façon de faire (les threads, c'est pas mon fort) mais si cela peut te donner une piste...

  3. #3
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Salut,
    Citation Envoyé par desert Voir le message
    Pour rafraîchir le Canvas, il y a la méthode redraw().
    redraw mais aussi update().
    redraw marque la surface du canvas comme invalide au prochain appel à la méthode paint. Mais ça ne redessine pas le Canvas.
    Il faut faire suivre redraw() par update()

  4. #4
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    merci pour ces info, j'ai pu avancer..
    mais j'ai toujours un pb..

    J'execute ce genre de code à chaque iteration de calcul de frame (calcul de position de points) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    display.asyncExec(new Runnable() {
    			public void run() {
    				canvas.redraw();
    				canvas.update();
    			}
    		});
    En debug, je vois bien que je passe dedans.
    Seul probleme, cela ne declanche pas de PaintEvent, et mon paintListener au niveau du canvas n'est donc pas executé..

    Par contre, si je joue avec la fenetre, alors le paintEvent est bien generé, et mon canvas est bien redessiné.

    Donc je peux reformuler mon pb en :
    comment generer un PaintEvent "à la main" ?

    merci de votre aide !
    cdlt

  5. #5
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    C'est bon, j'ai contourné le pb.
    Admettons que je ne puisse pas générer de PaintEvent,
    donc ca veut dire que je ne dois pas me servir du PaintListener pour dessiner automatiquement mon canvas

    J'ai donc créé une extension de Canvas, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static class MyCanvas extends Canvas {
    public MyCanvas(Composite parent, int style) (...)
    public void draw(){
    // dessine mes points
    }
    }
    et j'appelle draw() via un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    display.syncExec(new Runnable() {
    public void run() {
    	m_canvas.draw();
    }
    }
    et ca passe..

    S'il existe une meilleure solution, je suis preneur

    cdlt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire l'auto-resize d'un sous formulaire
    Par malingue dans le forum Access
    Réponses: 17
    Dernier message: 30/03/2019, 13h16
  2. [debutant] mysqldump - comment faire
    Par pierrot10 dans le forum Outils
    Réponses: 5
    Dernier message: 15/09/2009, 12h52
  3. [Debutant(e)] Comment faire un executable
    Par Spiff le spationaute dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 26/03/2006, 19h25
  4. [débutant][Conception] Comment faire un arbre?
    Par dr_m1 dans le forum Général Java
    Réponses: 4
    Dernier message: 08/10/2004, 00h08
  5. [SWT] Comment faire des fenetres internes ??????
    Par sebounator dans le forum SWT/JFace
    Réponses: 5
    Dernier message: 22/04/2004, 01h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo