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 :

Probleme SWT et fontdialog


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Par défaut Probleme SWT et fontdialog
    Bonjour,

    Voici mon problème, je suis en train de travailler sur un changement de font dans une application en SWT. Voici mon code :

    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
     
    myLayout = new RowLayout(SWT.VERTICAL);
    myLayout.wrap = true;
    parent.setLayout(myLayout);
     
    label = new Label(parent, SWT.NONE);
    label.setText("Je suis un label");
     
    Button bouton = new Button(parent, SWT.PUSH);
    bouton.setText("Je suis le bouton");
    bouton.addListener(SWT.MouseDown, new Listener() {
       public void handleEvent(Event event) {
          FontDialog ftd = new FontDialog(parent.getShell());
          ftd.setText("choisir une police");
     
          ftd.setFontList(label.getFont().getFontData());
          ftd.setRGB(label.getForeground().getRGB());
     
          ftd.open();
     
          //On récupère la couleur et on créé l'objet pour l'attribuer au label
          RGB colorRGB = ftd.getRGB();
          Color colorText = new Color(parent.getShell().getDisplay(), colorRGB);
          label.setForeground(colorText);
     
          //On récupère la font
          FontData [] fdata = ftd.getFontList();
          Font fontText = new Font(parent.getShell().getDisplay(), fdata);
          label.setFont(fontText);				
     
          colorText.dispose();
          //fontText.dispose();  //-> LA PROBLEME
       }
    });
    Mon problème est que lorsque je "dispose" ma variable fontText et que je clique à nouveau sur mon bouton, j'ai perdu tout sauf la couleur. Mais si je ne "dispose" pas tout marche bien.

    Savez vous ou est le problème??

    Merci d'avance de votre aide.

  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
    oui tu ne dois pas libérer les ressources tant que l'objet est utilisé, tu ne dois appeller la méthode dispose() que lorsque la police n'est plus nécessaire.

  3. #3
    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
    Oui il faut faire le dispose quand tu n'as plus besoin de ta couleur ou de ta fonte, comme ici :

    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
    36
    37
    38
    39
    40
     
    myLayout = new RowLayout(SWT.VERTICAL);
    myLayout.wrap = true;
    parent.setLayout(myLayout);
     
    label = new Label(parent, SWT.NONE);
    label.setText("Je suis un label");
     
    final Button bouton = new Button(parent, SWT.PUSH);
    bouton.setText("Je suis le bouton");
    bouton.addListener(SWT.MouseDown, new Listener() {
       public void handleEvent(Event event) {
          FontDialog ftd = new FontDialog(parent.getShell());
          ftd.setText("choisir une police");
     
          ftd.setFontList(label.getFont().getFontData());
          ftd.setRGB(label.getForeground().getRGB());
     
          ftd.open();
     
          //On récupère la couleur et on créé l'objet pour l'attribuer au label
          RGB colorRGB = ftd.getRGB();
          final Color colorText = new Color(parent.getShell().getDisplay(), colorRGB);
          label.setForeground(colorText);
     
          //On récupère la font
          FontData [] fdata = ftd.getFontList();
          final Font fontText = new Font(parent.getShell().getDisplay(), fdata);
          label.setFont(fontText);                
     
          // Nettoyage
          bouton.addDisposeListener(new DisposeListener() {
     
                public void widgetDisposed(DisposeEvent arg0) {
                    colorText.dispose();
                    fontText.dispose();
                }
             }));
       }
    });

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Par défaut
    Ok merci beaucoup. Mais je ne comprends toujours pas pourquoi lors de l'attribution il n'y a pas de recopie afin que l'on puisse libérer les ressources aisément??

  5. #5
    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
    je me suis posé la même question, à mon avis c'est pour éviter de créer trop d'objets, tu peux créer une seule instance of Font et l'utiliser pour tous les controles de ton programme plutôt que d'avoir une instance of Font pour chaque élément.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 145
    Par défaut
    Le mieux est d'utiliser la classe org.eclipse.jface.resource.JFaceResources

Discussions similaires

  1. [SWT]Probleme lancement swt sous linux
    Par jujuz dans le forum SWT/JFace
    Réponses: 7
    Dernier message: 12/07/2007, 15h34
  2. [SWT][IHM]Probleme d'affichage des icones
    Par barbu0055 dans le forum SWT/JFace
    Réponses: 6
    Dernier message: 03/03/2006, 12h05
  3. probleme visual editor : pas de menus SWT
    Par zemickeyman dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 09/10/2005, 17h43
  4. Réponses: 3
    Dernier message: 08/09/2005, 10h45
  5. [SWT][Editeur] Probleme avec V4All
    Par hanane_iaai dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/02/2005, 09h17

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