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

Composants Java Discussion :

[Swing] JCheckBox dans JTable, clic difficile


Sujet :

Composants Java

  1. #1
    Membre confirmé Avatar de Kihmé Xs
    Inscrit en
    Janvier 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 549
    Points : 491
    Points
    491
    Par défaut [Swing] JCheckBox dans JTable, clic difficile
    Voici ce que je possède pour le moment, j'ai bien ce que je voulais :


    Dans ma partie model j'ai une class Environment que j'ai créé. Celle ci possède des propriétés dont les deux que l'on voit dans ma jTable (user et host).

    Pour créer ma jTable j'utilise une class qui extends AbstractTableModel. Celle ci récupère une ArrayList<Environment>.

    Le add me sert uniquement pour l'interfaçage, il ne s'agit pas d'une propriété Environment. Sa valeur m'intéresse pour savoir sur quelles instances d'Environment je dois travailler.

    Problème : Bizarrement quand je clic sur un checkbox il y a des soucis d'initialisation, le comportement du clic est étrange, des fois il ne prend pas, parfois il change lorsque je clic sur un autre checkbox. Pas étonnant, en même temps quand on voit comme je gère le boolean.

    Des idées pour améliorer ça?

    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
    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
    public class EnvironmentsIntoJTable extends AbstractTableModel {
     
        private final ArrayList<Environment> environments = new ArrayList<Environment>();
        private final String[] header= {"User", "Host", "Add"};
        private boolean colClass = false;
     
        public EnvironmentsIntoJTable(ArrayList<Environment> anArrayList){
            super();
     
            for(Environment env : anArrayList){
                this.environments.add(env);
            }
        }
     
        public ArrayList<Environment> getEnvironments() {
            return environments;
        }
     
        @Override
        public Object getValueAt(int rowIndex, int columnIndex){
            switch(columnIndex){
                case 0:
                    return this.environments.get(rowIndex).getUser();
                case 1:
                    return this.environments.get(rowIndex).getHost();
                case 2:
                    return this.colClass;
                default:
                    return null;
            }
        }
     
        @Override
        public void setValueAt(Object val, int row, int col) {
            if(col==2){
                this.colClass=(boolean)val;
            }
        }
     
        @Override
        public boolean isCellEditable(int arg0, int arg1) {
            boolean rep=false;
            if (arg1==2){
                rep=true;
            }
            return rep;
        }
     
        @Override
        public Class getColumnClass(int arg0) {
            Class rep = String.class;
            if (arg0 == 2){
                rep = Boolean.class;
            }
            return rep;
        }
     
        @Override
        public int getColumnCount() {
            return header.length;
        }
     
        @Override
        public int getRowCount() {
            return environments.size();
        }
     
        @Override
        public String getColumnName(int column) {
            return header[column];
        }
     
    }

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 6 887
    Points
    6 887
    Par défaut
    Tu dois notifier tes listener du changement de données si tu veux rafraichir correctement ton tableau.

    Ceci dit je vois pas l'intérêt d'un booléen qui est valable pour toutes les données de la table ?

  3. #3
    Membre confirmé Avatar de Kihmé Xs
    Inscrit en
    Janvier 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 549
    Points : 491
    Points
    491
    Par défaut
    Ok merci, c'était justement cette façon de gérer le boolean que je voulais revoir.

    Du coup j'ai créé un arraylist<Boolean> contenant autant d'élement que j'ai d'Environment et je les fais coïncider.

    Plus de problème de clic et j'ai bien la gestion désirée.

    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
    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
    public class EnvironmentsIntoJTable extends AbstractTableModel {
     
        private final ArrayList<Environment> environments = new ArrayList<Environment>();
        private final String[] header= {"User", "Host", "Add"};
        private final ArrayList<Boolean> colBool=new ArrayList<Boolean>();
     
        public EnvironmentsIntoJTable(ArrayList<Environment> anArrayList){
            super();
            int i=0;
            for(Environment env : anArrayList){
                this.environments.add(env);
                this.colBool.add(false);
                i+=1;
            }
        }
     
        public ArrayList<Environment> getEnvironments() {
            return environments;
        }
     
        @Override
        public Object getValueAt(int rowIndex, int columnIndex){
            switch(columnIndex){
                case 0:
                    return this.environments.get(rowIndex).getUser();
                case 1:
                    return this.environments.get(rowIndex).getHost();
                case 2:
                    return this.colBool.get(rowIndex);
                default:
                    return null;
            }
        }
     
        @Override
        public void setValueAt(Object val, int row, int col) {
            if(col==2){
                this.colBool.set(row, (boolean)val);
            }
        }
     
        @Override
        public boolean isCellEditable(int arg0, int arg1) {
            boolean rep=false;
            if (arg1==2){
                rep=true;
            }
            return rep;
        }
     
        @Override
        public Class getColumnClass(int arg0) {
            Class rep = String.class;
            if (arg0 == 2){
                rep = Boolean.class;
            }
            return rep;
        }
     
        @Override
        public int getColumnCount() {
            return header.length;
        }
     
        @Override
        public int getRowCount() {
            return environments.size();
        }
     
        @Override
        public String getColumnName(int column) {
            return header[column];
        }
     
    }

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

Discussions similaires

  1. [Swing] JCheckbox dans JTable qui change de position
    Par isoman dans le forum Composants
    Réponses: 1
    Dernier message: 27/07/2011, 15h11
  2. Créer une ligne de JCheckBox dans une JTable
    Par Dark_TeToN dans le forum Composants
    Réponses: 5
    Dernier message: 19/10/2010, 14h36
  3. Réponses: 5
    Dernier message: 03/03/2010, 15h23
  4. jcheckbox dans une jtable
    Par orelero dans le forum Composants
    Réponses: 6
    Dernier message: 20/05/2006, 01h31
  5. pb avec un JcheckBox dans un Jtable
    Par hutchuck dans le forum Composants
    Réponses: 4
    Dernier message: 04/11/2005, 09h51

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