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 :

Problème insertion d'image


Sujet :

SWT/JFace Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut Problème insertion d'image
    Bonsoir,

    Je m'en remet à vous pour m'aider à insérer une image dans mon 'group'.
    Voici mon code ainsi que l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    group = new Group(composite, SWT.NONE);
    		final GridLayout gridLayoutGroup = new GridLayout();
    		gridLayoutGroup.numColumns = 1;
    		group.setLayout(gridLayoutGroup);
    Image image = new Image(display, "C:\\Program Files\\Eclipse\\logo.jpg");
    	    Button bouton = new Button(group, SWT.FLAT);
    	    bouton.setImage(image);
     image.dispose();
    Exception in thread "main" org.eclipse.swt.SWTException: Graphic is disposed
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.graphics.Image.getBounds(Unknown Source)
    at org.eclipse.swt.widgets.Button.computeSize(Unknown Source)
    at org.eclipse.swt.layout.GridData.computeSize(Unknown Source)
    at org.eclipse.swt.layout.GridLayout.layout(Unknown Source)
    at org.eclipse.swt.layout.GridLayout.computeSize(Unknown Source)
    at org.eclipse.swt.widgets.Composite.computeSize(Unknown Source)
    at org.eclipse.swt.widgets.Group.computeSize(Unknown Source)
    at org.eclipse.swt.layout.GridData.computeSize(Unknown Source)
    at org.eclipse.swt.layout.GridLayout.layout(Unknown Source)
    at org.eclipse.swt.layout.GridLayout.layout(Unknown Source)
    at org.eclipse.swt.widgets.Composite.updateLayout(Unknown Source)
    at org.eclipse.swt.widgets.Composite.layout(Unknown Source)
    at org.eclipse.swt.widgets.Composite.layout(Unknown Source)
    at org.eclipse.swt.widgets.Composite.layout(Unknown Source)
    at listeArticles.<init>(listeArticles.java:197)
    at index.main(index.java:54)
    Merci beaucoup

  2. #2
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut
    Enlève la ligne image.dispose(); et tu n'auras plus le problème.
    En fait tu détruis l'image alors que tu l'as associée au bouton, du coup quand le bouton est redessiné il tombe sur une image détruite, d'où le message d'erreur "Graphic is disposed".
    Tu ne dois détruire les ressources que lorsqu'elles ne sont plus utilisées, par exemple si ton bouton est le seul à utiliser ton image la solution est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    button.addListener(SWT.Dispose, new Listener() {
        public void handleEvent(Event e) {
            ((Button)e.widget).getImage().dispose();
        }
    });
    Cela permet de détruire l'image lorsque le bouton est détruit, ainsi les ressources sont libérées proprement.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut
    Merci c'est bon
    Et merci pour l'explication

    Maintenant si je veux intégrer mon image dans un canvas comment dois-je m'y prendre ?

    Bonne journée

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2006
    Messages : 218
    Par défaut
    Salut,

    Pour ajouter une image dans un canvas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        final Image image = new Image(display, "C:\\Program Files\\Eclipse\\logo.jpg");
        Canvas canvas = new Canvas(shell,SWT.NO_REDRAW_RESIZE);
        canvas.addPaintListener(new PaintListener() {
            public void paintControl(PaintEvent e) {
             e.gc.drawImage(image,0,0);
            }
        });
    N'oublie pas de mettre ton post en résolu

    Laurent

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut
    Merci mais avec le code que tu me donne j'ai cette erreur :
    The type new PaintListener(){} must implement the inherited abstract method PaintListener.paintControl(PaintEvent)
    :S

  6. #6
    Membre chevronné 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
    Par défaut
    Vérifies le chemin de ta classe PaintEvent (tout en haut).
    Tu dois y retrouver
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    import org.eclipse.swt.events.PaintEvent
    et non
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    import java.awt.event.PaintEvent
    Il y a peut-être confusion.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut
    Bonsoir,
    Merci bien
    Maintenant j'ai une autre question.
    Comment pourrais-je centrer mon image dans mon Canvas horizontalement et verticalement ? J'ai essayé SWT.CENTER mais rien :S
    Je recherche aussi à ajouter une marge supérieure à mon canvas pour ça j'utilise la classe GridLayout avec 'gridLayoutComittel.marginTop' mais rien ne se fait :S
    Voilà où j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     final Image image = new Image(display, "C:\\com.png");
    	    Canvas canvas = new Canvas(composite,SWT.CENTER|SWT.BORDER);
    	    GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
    		gridDatal.widthHint=239;
    		gridData.heightHint=59;
    		canvas.setLayoutData(gridData);
    	    canvas.addPaintListener(new PaintListener() {
    	        public void paintControl(PaintEvent e) {
    	         e.gc.drawImage(image,0,0);
    	        }
    	    });
    Merci et bonne soirée

  8. #8
    Membre chevronné 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
    Par défaut
    Pour le centrage, c'est au niveau du GridData que cela se joue.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    GridData gridData = new GridData();
    gridData.grabExcessHorizontalSpace = true;
    gridData.grabExcessVerticalSpace = true;
    gridData.horizontalAlignment = SWT.CENTER;
    gridData.verticalAlignment = SWT.CENTER;
    grabExcess...Space signifie que le composant va s'agrandir en fonction de la place disponible.

    Pour la marge supérieur, c'est dans ta fonction paintControl qu'il faut agir.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void paintControl(PaintEvent e) {
        Point size = canvas.getSize(); /* récupère la taille du Canvas */
        e.gc.drawLine(0, 0, size.x, 0); /* dessine une ligne à partir du coin haut gauche (0,0) jusqu'au point haut droit (size.x, 0) */
    }

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut
    Merci pour les explications
    J'ai un autre problème pour les évènements sur les éléments du tableau mais comme celà ne concerne pas ce topic je crée un nouveau

    Résolu merci

    Bonne soirée

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

Discussions similaires

  1. problème insertion d'image dans la GUI
    Par biwi8272 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 05/02/2009, 17h26
  2. [PDFlib] Probléme insertion d'image
    Par rafawel dans le forum Modules
    Réponses: 6
    Dernier message: 22/05/2006, 13h18
  3. [MySQL] Problème d'insertion d'image en base
    Par yokyok dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 16/05/2006, 11h01
  4. [HTML] Problème insertion d'une image de fond dans cellule
    Par LE NEINDRE dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 31/03/2006, 11h56
  5. [javascript] problème insertion image
    Par Pwill dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/05/2005, 16h12

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