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 :

ListViewer : comment récupérer l'ancienne sélection ?


Sujet :

SWT/JFace Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 7
    Points
    7
    Par défaut ListViewer : comment récupérer l'ancienne sélection ?
    Salut à tous !

    J'ai besoin dans un Listviewer de simuler l'appui de la touche CTRL lors de la sélection d'éléments : ajout si l'élément n'était pas sélectionné, suppression s'il l'était.

    Apparemment il n'y a pas de propriété par défaut pour que les ListViewer se comportent comme ça ...

    j'ai donc tenté d'ajouter un selectionChangedListener, mais même si je ne récupère pas la sélection de l'event, mais bien la sélection du composant, j'ai toujours la sélection courante.

    Est ce que vous avez des pistes à me fournir ? Peut être un style en natif qui m'éviterait de faire de la bidouille ?

    merci !!

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    J'imagine que ce que tu veux obtenir c'est une sélection multiple?
    Si c'est ça, alors ton problème n'est pas compliqué car c'est déjà prévu dans les composants SWT (même si dans ton cas, tu utilises un composant JFace, mais ça marchera aussi). En effet, quand tu crées ton ListViewer, que ce soit grâce au constructeur qui utilise un Composite et des styles ou grâce au constructeur qui utilise une List SWT, à un moment, tu vas devoir utiliser le style SWT.MULTI et tu auras le comportement que tu attends.
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ListViewer myViewer = new ListViewer(myComposite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
     
    // ou
    List myList = new List(myComposite, SWT.MULTI);
    ListViewer myViewer = new ListViewer(myList);

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Merci pour la réponse, mais en fait je me suis mal exprimé :

    J'ai bien la possibilité de faire de la multi sélection, mais en fait c'est une appli qui tourne sur tabletPC, et du coup, n'ayant pas de touche CTRL, j'ai besoin, quand je clique sur un élément de la liste, qu'il s'ajoute à la sélection et non pas qu'il remplace la sélection courante. Ou alors, dans le cas où il était sélectionné, qu'il se retire de la sélection.

    Voilà, dites moi si je ne suis toujours pas clair

  4. #4
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Bon, je vois ce que tu veux faire. Donc, pour pouvoir y arriver, il te "suffit" de maintenir une liste de sélection. Je m'explique, quand tu reçois un évènement dans ton ISelectionChangedListener, tu regardes dans ta liste de sélection si la sélection de l'utilisateur est déjà présente ou non. Tu mets cette liste à jour et ensuite, il ne te reste plus qu'à mettre la sélection à jour.
    Un exemple vaut plus que de long discours :
    Code Java : 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
        /**
         * @param args the argument of the command.
         */
        public static void main(final String[] args) {
            final Display display = new Display();
            Shell shell = new Shell(display);
            shell.setLayout(new GridLayout());
     
            List < String > content = new ArrayList < String >();
            content.add("test");
            content.add("test1");
            content.add("test2");
            content.add("test3");
     
            Composite composite = new Composite(shell, SWT.NONE);
            composite.setLayoutData(new GridData());
            composite.setLayout(new GridLayout());
            ListViewer viewer =
                new ListViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL
                    | SWT.BORDER);
            viewer.setContentProvider(new ArrayContentProvider());
            viewer.setLabelProvider(new LabelProvider());
            viewer.setInput(content);
            viewer.getList().setLayoutData(new GridData());
     
            viewer.addSelectionChangedListener(new ISelectionChangedListener() {
     
                /**
                 * The list containing the user selection.
                 */
                private List < String > selectedElements =
                    new ArrayList < String >();
     
                /**
                 * Attribute used to prevent infinite loop in the listener.
                 */
                private boolean updated = false;
     
                public void selectionChanged(final SelectionChangedEvent event) {
                    if (!updated) {
                        ISelection selection = event.getSelection();
                        if (selectedElements != null) {
                            boolean toAdd = false;
                            if (selection instanceof IStructuredSelection) {
                                Iterator < ? > iterator =
                                    ((IStructuredSelection) selection).iterator();
                                while (iterator.hasNext()) {
                                    Object object = iterator.next();
                                    if (object instanceof String) {
                                        toAdd = !selectedElements.contains(object);
                                        if (toAdd) {
                                            selectedElements.add(object.toString());
                                        } else {
                                            selectedElements.remove(object
                                                .toString());
                                        }
                                    }
                                }
                            }
                            // Set the selection to the one desired.
                            IStructuredSelection newSelection =
                                new StructuredSelection(selectedElements);
                            // Prevent infinite loop in listener body.
                            updated = true;
                            event.getSelectionProvider().setSelection(newSelection);
                        }
                    } else {
                        updated = false;
                    }
                }
            });
            shell.setSize(500, 500);
            shell.pack();
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch()) {
                    display.sleep();
                }
            }
            display.dispose();
     
        }

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Super, merci !
    Dommage cela dit qu'il n'implémentent pas une solution simple pour avoir un comportement de ce type ...

  6. #6
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Avec plaisir.
    Si ton problème est résolu, n'oublie pas le bouton

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/07/2010, 13h59
  2. [ListView] Comment récupérer l'ID ?
    Par Lookoum dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 18/09/2008, 17h05
  3. Réponses: 7
    Dernier message: 14/04/2007, 18h25
  4. Réponses: 2
    Dernier message: 07/06/2006, 09h42
  5. [TShellListView] Comment récupérer la sélection ?
    Par Mimi Bulles dans le forum Composants VCL
    Réponses: 1
    Dernier message: 23/06/2005, 22h21

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