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 :

Dessiner dans un canvas


Sujet :

SWT/JFace Java

  1. #1
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut Dessiner dans un canvas
    Bonjour,

    J'ai une vue dans laquelle j'ai une tableviewer et à droite un canvas où je positionne des markers (un peu le même principe que les markers d'erreur dans l'éditeur C), soit enregistrés, soit l'utilisateur les met dynamiquement.
    Pour les markers enregistrés, je ne vois pas à quel moment je dois les afficher. Si je les affiche à la fin de mon createComposite je ne vois rien s'afficher, si je met un paint sur mon canvas ça clignote car rafraîchit tout le temps.
    Pour tous les markers ajoutés dynamiquement et ça sans paint, si je change de vue et que je reviens ils ont disparu.

    Je vois bien qu'il faut que j'ajoute un événement ou un listener mais j'arrive pas trop à voir lequel et où faire ça ...

    j'ai tenté un addPaintListener sur le composite contenant mon canvas, on passe bien dedans lorsqu'on revient sur cette vue, mais alors que je vois que ça se dessine c'est aussitôt effacé et on ne voit que le canvas tout gris

    Un tuyau ?
    Merci d'avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour le clignotement, je pense que tu as du mettre à appel à redraw() dans le code de PaintListener.paintControl(), ce qui est non seulement inutile, mais va créer une boucle infinie, d'où le clignotement.

    Il te faut utiliser un PaintListener (à ton composant, pas un autre, pour qu'il soit invoqué à bon escient) pour dessiner l'état actuel de ton composant, et appeler redraw() uniquement lorsque tu modifies l'état.

    Un exemple de principe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    class MyCanvas extends Canvas {
     
    	private final List<Marker> markers;
     
    	public MyCanvas(Composite parent, int style) {
    		super(parent, style);
    		markers = new ArrayList<>();
    		addPaintListener(new PaintListener() {
     
    			@Override
    			public void paintControl(PaintEvent e) {
    				Point size = getSize(); 
    				for(Marker marker : markers) {
    					marker.draw(e.gc, 0, 0, size.x, size.y);
    				}
    			}
    		});
    	}
     
    	public void addMarker(Marker marker) {
    		checkWidget();
    		if ( !markers.contains( marker ) ) {
    			markers.add(marker);
                            redraw();
    		}
    	}
     
    	public void removeMarker(Marker marker) {
    		checkWidget();
    		if ( markers.remove(marker) ) {
    		   redraw();
                    }
    	}
     
    }
    Tu peux éventuellement utiliser le flag de style SWT.DOUBLE_BUFFERED, pour éviter l'effet de scintillement à chaque ajout de marker.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut
    oh ! bah oui c'était ça !!!
    le redraw de trop ... en fait j'avais fait des essais et c'est resté !

    un grand grand MERCI !!!

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

Discussions similaires

  1. WPF C# Masquer des dessins dans un canvas
    Par Towandaa dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 05/03/2012, 15h31
  2. Binding et dessin dans un Canvas
    Par MiniCesc dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 20/01/2011, 12h22
  3. Mettre un event sur un objet dessiné dans un Canvas
    Par calogerogigante dans le forum Tkinter
    Réponses: 11
    Dernier message: 30/01/2010, 09h05
  4. Affichage d'un dessin dans un Canvas lors d'un clic sur une image
    Par totooo dans le forum Développement Mobile en Java
    Réponses: 1
    Dernier message: 19/06/2009, 11h26
  5. Comment effacer le dessin dans un Canvas ?
    Par RoM_CoOl dans le forum Langage
    Réponses: 11
    Dernier message: 29/11/2007, 16h11

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