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 :

Checkbox cliquable dans JTable


Sujet :

Composants Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut Checkbox cliquable dans JTable
    Bonjour,

    J'ai créé une classe héritant d' AbstractTableModel pour faire mes jtable mais je n'arrive pas à cocher les checkbox alors que les zones textes contenues dans cette jtable sont bien accessibles en édition.

    Voici ma classe et comment je 'appelle
    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
     //défini l'header
    	    ArrayList<String> header = new ArrayList<String>(
    	    	    Arrays.asList("id","Catégorie", "Sélection"));
     
    	    Class[] columnTypes = new Class[] {
    				String.class,String.class, Boolean.class
    			};
    	    //crée le modèle utilisé pour jtable
    	    final MyTableModel modelCateg = new MyTableModel(movie.getCateg(),header,columnTypes);
     
    class MyTableModel extends AbstractTableModel {
     
    		//list contanant les données
    	    private ArrayList<Object[]> rows;
    	    //list contenant l'entete
    	    private ArrayList<String> header;
    	    //list contenant les types de colonnes
    		private Class[] columnTypes;
    	    public MyTableModel(ArrayList<Object[]> data,ArrayList<String> header,Class[] colTypes){
    	        this.rows = data;
    	        this.header = header;
    	        this.columnTypes = colTypes;
    	    }
    	    public void addRow(Object[] row) {
    	    	//ici j'ajoute à ma list mais à la fin
    	    	rows.add(0,row);
    	    	fireTableDataChanged();
    	    }
    	    public void emptyData(){
    	    	this.rows.clear();
    	    	fireTableDataChanged();
    	    }
     
    	    public void setData(ArrayList<Object[]> data){
    	    	this.rows.clear();
    	    	this.rows = data;
    	    	fireTableDataChanged();
    	    }
    	    @Override
    	    public Class<?> getColumnClass(int columnIndex) {
    	        return columnTypes[columnIndex];
    	    }
    	    @Override
    	    public int getColumnCount(){
    	        return header.size();
    	    }
    	    public int getRowCount() {
    	        return rows.size();
    	    }
    	    @Override
    	    public String getColumnName(int col){
    	        return header.get(col).toString();
    	    }
    	    @Override
    	    public Object getValueAt(int row, int col){
    	    	return rows.get(row)[col];
    	    }
     
    	    @Override
    	    public boolean isCellEditable(int row, int col){
    	    	return true; 
    	    }
    	}
    Comme vous pouvez le voir, je renvoie bien toujours true à isCellEditable

    Merci de votre aide

  2. #2
    Membre confirmé Avatar de Kazh Du
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 152
    Points : 561
    Points
    561
    Par défaut
    il suffit de préciser que ta colonne est bien de type Boolean lors de l'appelle à la fonction getColumnClass sans passer par un tableau qui (je pense) généralisera la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	    public Class<?> getColumnClass(int columnIndex) {
    	        if (columnIndex==2) { return Boolean.class; }
    	        return String.class;
    	    }
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    Si je fais ca, ca ne sera plus generique pour toutes mes jtable et la ca retourne deja un class.boolean vu que j ai bien mes cases a cocher mais elles sont pas cochables (je sais pas si ca se dit lol)

    Le probleme est juste que la colonne a l air d etre en readonly alors que les autres de type string sont bien editables.

    Merci

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Il faut que tu appliques un Editor à la colonne en question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maTable.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(new JCheckBox()));
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    J'ai rajouté cette ligne après la création de ma jTable mais lorsque je clique sur la case à cocher, elle part sur la gauche de la cellule puis reviens au centre (sans se cocher) lorsque je relâche le clique.

    Merci de votre aide

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    Personne n a une idee pour mon soucis de checkbox qui n est pas cliquable dans ma jtable?

    Merci

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Meme probleme
    Salut,

    Je viens de rencontrer le même probleme donc je voulais savoir si tu avais reussi a resoudre ton problème et si oui, es que tu peux m'aider.

    J'ai essayer avec les boolean et les checks box mais je peux pas changer les boolean et les checkbox ne s'affiche pas. Donc si tu as la solution je te srais très reconnaissant.

    Merci

  8. #8
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    J'ai eu le même problème que j'ai fini par résoudre
    En fait il faut ajouter à la classe qui étend l'AbstractTableModel la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void setValueAt(Object value, int row, int col) {
    		if (col == 0) {
    			datas.get(row).setAffiche(((Boolean)value).booleanValue());
    		} 
    		fireTableCellUpdated(row, col);
    	}
    Pour ma part la colonne 0 de ma table est une CheckBox
    datas est une ArrayList qui contient mes lignes
    A chaque fois que je clique sur une ligne de ma table je vérifie si c'est la colonne 0 auquel cas je modifie la valeur dans la ligne correspondante.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

Discussions similaires

  1. CheckBox & Background dans une JTable
    Par somnix dans le forum Composants
    Réponses: 5
    Dernier message: 22/10/2012, 14h56
  2. Problème CheckBox dans JTable
    Par l4r3nZu dans le forum Composants
    Réponses: 2
    Dernier message: 28/05/2011, 14h02
  3. CheckBox personalisée dans un JTable
    Par Haukthau dans le forum Composants
    Réponses: 2
    Dernier message: 29/03/2011, 12h16
  4. Valeur Checkbox dans JTable
    Par fred33 dans le forum Débuter
    Réponses: 1
    Dernier message: 26/07/2010, 09h47
  5. Réponses: 11
    Dernier message: 26/12/2009, 17h29

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