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 :

[SWT] Rendre invisibles les scrollbars d'un Text


Sujet :

SWT/JFace Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 26
    Points
    26
    Par défaut [SWT] Rendre invisibles les scrollbars d'un Text
    Bonjour les amis du SWT
    J'ai un petit soucis graphique :
    J'ai créé un text multiligne avec des scrollbars et je voudrais qu'elle ne soit pas visibles quand elles sont inutiles (mais pas seulement grisées, vraiment invisibles!).
    Voila ma définition du widget Text :
    Text textDescription = new Text(composite, SWT.READ_ONLY | SWT.LEFT | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);

    Merci d'avance si vous voyez la solution.

  2. #2
    Membre averti
    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
    Points : 379
    Points
    379
    Par défaut
    Tu dois le faire "à la main" il me semble. Je te donne l'exemple pour la barre verticale :

    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
     
    text.getVerticalBar().setVisible(false); //on masque la barre de défilement
    text.addListener(SWT.Modify, new Listener() { //poour être prévenu d'une modif. du texte
     
        public void handleEvent(Event e) {
            Text text = (Text) e.widget;
            ScrollBar vScroll = text.getVerticalBar();
            Point textSize = text.getSize();
            Point prefSize = text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
     
            //on teste si la taille actuelle du Text est supérieure à sa taille préférée, si oui
            //alors on affiche la barre de défilement.
            if ((textSize.y < prefSize.y) && !vScroll.getVisible()) {
                vScroll.setVisible(true);
            }
            else if ((textSize >= prefSize) && vScrolll.getVisible()) {
                vScroll.setVisible(false);
            }
        }
     
    });
    Il me semble qu'une fois j'avais écris quelque chose comme ça pour un problème similaire mais je ne peux pas le tester tout de suite donc dit moi si ça fonctionnne ou quelles modifications tu y as apporté.

    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 26
    Points
    26
    Par défaut
    Merci pour ta réponse. C'est ce que je craignais

    J'ai testé ton code et apporté quelques modifications :
    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
    text.getVerticalBar().setVisible(false);
    text.getHorizontalBar().setVisible(false);
    text.addListener(SWT.Modify, new Listener() {
     
            public void handleEvent(Event e) {
                            Text text = (Text) e.widget;
                            ScrollBar vScroll = text.getVerticalBar();
                            ScrollBar hScroll = text.getHorizontalBar();
                            Point textSize = new Point(400, 50); // text.getSize();
                            Point prefSize = text.computeSize(SWT.DEFAULT,
                                                              SWT.DEFAULT);
                            if ((textSize.y < prefSize.y) && !vScroll.getVisible()) {
                                vScroll.setVisible(true);
                            } else if ((textSize.y >= prefSize.y)
                                    && vScroll.getVisible()) {
                                vScroll.setVisible(false);
                            }
                            if ((textSize.x < prefSize.x) && !hScroll.getVisible()) {
                                hScroll.setVisible(true);
                            } else if ((textSize.x >= prefSize.x)
                                    && hScroll.getVisible()) {
                                hScroll.setVisible(false);
                            }
            }
     
    });
    Remarque :
    - dans mon cas si je mets : Point textSize = text.getSize();
    textSize égal (0,0) donc j'ai préféré indiquer la taille en dur.

    Sinon pour l'instant je n'ai pas vu de problème et ça fonctionne bien.
    A suivre.

  4. #4
    Membre averti
    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
    Points : 379
    Points
    379
    Par défaut
    C'est étrange que la taille soit (0, 0), essaye avec getBounds() en regardant les champs width et height (sauf si la taille de ton champ de text ne change pas).
    Vérifie aussi que ton controle a déjà été affiché sinon il n'aura pas encore de taille.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 26
    Points
    26
    Par défaut
    Vérifie aussi que ton controle a déjà été affiché sinon il n'aura pas encore de taille.
    Ca doit venir de là car effectivement il n'est pas affiché (mon traitement : je crée une zone de texte que je remplis avec du texte dont je ne connais pas la taille ).

  6. #6
    Membre averti
    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
    Points : 379
    Points
    379
    Par défaut
    Alors tu devrais remplacer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Point size = new Point(400, 50);
    par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Point size = text.getSize();
    if (size.x == 0) size.x = 400;
    if (size.y == 0) size.y = 50;

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 26
    Points
    26
    Par défaut
    Qu'est-ce que j'y gagne ?

  8. #8
    Membre averti
    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
    Points : 379
    Points
    379
    Par défaut
    De cette façon si tu redimensionnes ton champs de texte c'est sa taille redimensionnée qui sera prise en compte pour l'affichage des barres, et non 400x50.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/06/2015, 12h56
  2. Comment rendre invisibles les fichiers.asv
    Par Pierrot92320 dans le forum MATLAB
    Réponses: 2
    Dernier message: 01/06/2009, 14h10
  3. rendre invisible les partie d'une form en fonction de leur couleur?
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/07/2007, 14h41
  4. Réponses: 5
    Dernier message: 19/10/2006, 23h25
  5. Rendre invisible les valeurs passant par l'URL
    Par Jones dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/11/2004, 11h50

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