Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Nouveau Membre du Club
    Femme Profil pro
    Inscrit en
    janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : janvier 2012
    Messages : 182
    Points : 29
    Points
    29

    Par défaut Checkbox SWT Listener

    Salut à tous,
    Je cherche à réaliser une checkbox en SWT. Le problème vient du listener. Je voudrais le mettre sur une ligne et non sur l'ensemble de la checkbox.

    Voici le code que je voudrais (avec le listener non fonctionnel):

    Code :
    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
            Composite top = new Composite(parent, SWT.NONE);
            this.table = new Table(top, SWT.CHECK);
            this.table.setSize(204,1000);
            this.table.setHeaderVisible(true);
            this.table.setLinesVisible(false); 
    
    ...................
    
    TableColumn colonne1 = new TableColumn(table, SWT.CENTER);
            colonne1.setText("Vertex List");
            colonne1.setWidth(204);
            
                
            if (null != this.activeXmlFile){
                final Object[] colStrEnable = this.activeXmlFile.getComponentsEnable().toArray();
                final Object[] colStrName = this.activeXmlFile.getComponentsName().toArray();
                for (int i=0; i< this.activeXmlFile.getComponentsLength() ;i++)
                {
                	
                    TableItem ligne = new TableItem(table,SWT.NONE);
                    ligne.setText((String)colStrName[i]);
                    ligne.addListener(SWT.Selection, new Listener() {
                    	
    					public void handleEvent(Event event) {
    						 TableColumn colonne1 = new TableColumn(table, SWT.CENTER);
            colonne1.setText("Vertex List");
            colonne1.setWidth(204);
                        
            if (null != this.activeXmlFile){
                final Object[] colStrEnable = this.activeXmlFile.getComponentsEnable().toArray();
                final Object[] colStrName = this.activeXmlFile.getComponentsName().toArray();
                for (int i=0; i< this.activeXmlFile.getComponentsLength() ;i++)
                {
                	
                    TableItem ligne = new TableItem(table,SWT.NONE);
                    ligne.setText((String)colStrName[i]);
                    ligne.addListener(SWT.Selection, new Listener() {
                    	
    					public void handleEvent(Event event) {
    						 System.out.println("IN");
    						
    					}
                    
                    });
                    if (colStrEnable[i].equals("true")==true){
                        ligne.setChecked(true);
                    }else{
                    	ligne.setChecked(false);
                    }
    Je voudrais que lorsque je coche ou décoche une ligne, le "IN" apparaissent dans ma console.

    Je sais qu'on peut passer par un table.addListener(SWT.Selection, new Listener() mais ca ne me convient pas par rapport à mon code.

    Une idée de comment faire?

  2. #2
    Nouveau Membre du Club
    Femme Profil pro
    Inscrit en
    janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : janvier 2012
    Messages : 182
    Points : 29
    Points
    29

    Par défaut

    Pour être plus concise, je cherche à ajouter un addListener sur un TableItem.

  3. #3
    Modérateur
    Avatar de Gueritarish
    Homme Profil pro Marc
    Développeur Java
    Inscrit en
    mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Nom : Homme Marc
    Âge : 30
    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 778
    Points
    3 778

    Par défaut

    Salut,

    En terme de besoin fonctionnel, tu cherches à faire quoi exactement?
    Parce que nous dire que tu cherches à ajouter un listener, c'est bien, nous dire à quoi il va servir, c'est mieux
    Pour l'instant, je ne vois pas où tu veux en venir... Juste être informé que l'utilisateur à cliquer sur la checkbox dans ta Table? C'est un évènement de sélection, après il utilise le champ SelectionEvent.detail. Il te suffit de faire la comparaison avec SWT.CHECK, si ça te renvoie true, alors, c'était un clic sur la checkbox.
    Exemple:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    myTable.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(final SelectionEvent e) {
        if (e.detail == SWT.CHECK) {
          System.out.println("Checkbox");
        } else {
          System.out.println("Sélection");
        }
      }
    });
    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  4. #4
    Nouveau Membre du Club
    Femme Profil pro
    Inscrit en
    janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : janvier 2012
    Messages : 182
    Points : 29
    Points
    29

    Par défaut

    Oui c'est comme j'avais fait au départ mais je n'arrivais pas à retomber sur ce que je voulais sans retester ma liste. Mais bon je m'y suis prise autrement, avec le même type de code, et ca marche.

    Merci!

  5. #5
    Nouveau Membre du Club
    Inscrit en
    avril 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 86
    Points : 26
    Points
    26

    Par défaut

    Dommage que tu n'es pas mis ta solution, histoire de partager un petit peu.

    Je me permet donc de proposer une solution avec une classe dérivée de TableViewer : CheckboxTableViewer.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //Construction
    final CheckboxTableViewer tableViewer = CheckboxTableViewer.newCheckList(this, SWT.BORDER);
     
    //Ajout du listener
    tableViewer.addCheckStateListener(new ICheckStateListener() {
    	@Override
    	public void checkStateChanged(final CheckStateChangedEvent checkstatechangedevent) {
    		System.out.println(((/* Le type de l'objet */) checkstatechangedevent.getElement()).getId() + " : " + checkstatechangedevent.getChecked());
    	}
    });
     
    //Une autre méthode qui est assez pratique et qui te renvoie un tableau contenant les objets cochés
    tableViewer.getCheckedElements()

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •