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 :

[JTable] Modification d'une checkbox


Sujet :

Composants Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut [JTable] Modification d'une checkbox
    Bonjour,

    j'ai un problème pour modifier la valeur d'une check box dans une JTable. Je sais que je dois utiliser la méthode setValueAt de mon tableModele : je devrai faire
    data[row][col]=value mais le probleme est que dans mon tableModel, je n'ai pas de tableau à deux dimensions.

    voici mon tableModele:

    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
    public class TableModelPrestaAValider extends AbstractTableModel {
     
    	private String[] cols= {"Numéro","Société","Date","Contrat","Projet","Intervention"};
    	private List<Prestation> rows ;	
     
     
    	public TableModelPrestaAValider(List<Prestation> r){
    		super();
    		rows=r;
    	}
     
    	public String getColumnName(int col){
    		return cols[col];
    	}	
     
    	public int getRowCount(){
    		return rows.size();
    	}
     
    	public int getColumnCount() {
    		return cols.length;
    	}
     
    	public Object getValueAt(int row,int column) {
     
    		switch(column){
    		case 0:
    			return rows.get(row).getIdPresta();
    		case 1:
    			return rows.get(row).getClient().getSociete();
    		case 2:
    			return DateHeure.calendarDateEnString(rows.get(row).getDateJour());
    		case 3:
    			if(rows.get(row).getContrat()==null)
    				return new Boolean(false);
    			else
    				return new Boolean(true);
    		case 4:
    			if(rows.get(row).getProjet()==null)
    				return new Boolean(false);
    			else
    				return new Boolean(true);
    		case 5:
    			if(rows.get(row).getHc()==null)
    				return new Boolean(false);
    			else
    				return new Boolean(true);
    		}		
    		return null;
    	}
     
    	public void setData(List<Prestation> prestas){
    		this.rows = prestas;
    		super.fireTableDataChanged();
    	}
        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }
        public boolean isCellEditable(int row, int col) {
            if (col>2)
                return true;
            else 
                return false;
        }
    Quelqu'un aurait il une solution à me proposer?

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Le setValueAt c'est le contraire du getValueAt...

    Vulgairement =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public void setValueAt(Object value, int row,int column) {
     
    		switch(column){
    		case 0:
    			return rows.get(row).setIdPresta((int) value);
    		case 1:
    			return rows.get(row).getClient().setSociete((Societe) value);
    		// etc...
    		return null;
    	}

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    Le problème c'est que ce sont les 3 dernières colonnes que je veux modifier (3,4,5) qui sont en fait des check box mais ces check box ne sont enregistrées nulle part donc je sais pas très bien comment faire.

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void setValueAt(Object value, int row,int column) {
    Dans le cas de tes colonnes booléennes, value sera un Boolean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Boolean valeur = (Boolean) value;

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    La CheckBox est juste un renderer pour un booléen. Tu n'as donc pas à t'occuper des CheckBox.
    Il te suffit de modifier les valeurs booléennes des cellules, c'est tout.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    je sais que je dois modifier les valeurs booléennes des cellules mais justement, je ne sais pas comment. Si tu pouvais m'aider, cela serait très sympa.

  7. #7
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par aileen Voir le message
    je sais que je dois modifier les valeurs booléennes des cellules mais justement, je ne sais pas comment. Si tu pouvais m'aider, cela serait très sympa.
    Je viens de le dire........

  8. #8
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par natha Voir le message
    Je viens de le dire........
    J'allais le dire
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    Ce que vous me dites ne change pas la valeur de mon boolean car la méthode setValueAt est un void donc ne retourne rien donc pour changer la valeur d'une cellule, je devrai avoir un tableau à double dimension me permettant de setter une cellule, mais je n'ai pas ce tableau car toutes mes données proviennent de la base de donnée et elles sont initialisées à l'appel de la méthode getValueAt(...).

  10. #10
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ton "setValueAt" va modifier les données dans ta base de données !
    Quel est le problème ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    le problème, c'est qu'il ne change pas ma valeur dans ma JTable (il ne coche pas la check box quand j'appuie dessus)

  12. #12
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par aileen Voir le message
    le problème, c'est qu'il ne change pas ma valeur dans ma JTable (il ne coche pas la check box quand j'appuie dessus)
    Ah ok
    Alors utilise "fireTableDataChange()" ou encore "fireTableRowsUpdated" si tu connais les lignes qui ont été modifiées.
    Ces méthodes sont à utiliser sur ton modèle.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    j'ai essayé avec ce que tu m'as dit mais ca ne fonctionne toujours pas

  14. #14
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par aileen Voir le message
    j'ai essayé avec ce que tu m'as dit mais ca ne fonctionne toujours pas
    On parle, on parle, mais je suis un peu perdu entre ce qu'on te dis de faire et ce que tu fais réellement.
    Donc petit récapitulatif (pour moi, car fin de semaine, toussa... mais je suis sur que les autres sont au point...) :
    - Il te faut un setValueAt qui modifie ta base de données.
    - fireTableDataChange pour recharger toute la table, ou fireTableRowUpdate pour recharger uniquement les lignes passées en paramètre

    Une fois coder tout ça, modifie une donnée dans ta table, puis fait une requête en base pour vérifier si la donnée a été modifiée. Dis-nous ce que ça donne pour qu'on avance dans l'analyse
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    En fait, je ne veux pas que ca modifie directement ma base de données. J'ai une jTable qui me donne une liste de prestation(qui ont été chargée de la base de données). Dans cette Jtable, j'ai rajouté une colonne qui contient des boolean afin de permettre à l'utilisateur de cocher la case s'il veut valider une prestation. Mais si on coche la case, aucune modification ne doit être faite dans la base de données. C'est seulement une fois que l'utilisateur aura coché toutes les cases qu'il veut et aura appuyé sur un bouton en dessous de la Jtable qu'il faudra prendre en compte ces booleen.
    Mais moi, mon problème c'est que je n'arrive même pas à cocher une checkbox de la jtable.

  16. #16
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ah ok ! Donc on tourne en rond depuis le début
    Mon récapitulatif était donc très utile
    Il te faut des champs supplémentaires dans ton objet Prestation pour gérer trois booléens supplémentaires. Ton getValueAt envoie directement ces booléens. Les tests de nullités seront fait dans la classe Prestation.
    Tu peux donc faire un setValueAt qui pourra modifier les booléens dans tes Prestation.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut


    Effectivement, ca me semble une très bonne idée, j'y avais pas pensé! Vais essayer tout ca. En tout cas merci beaucoup pour ton aide et ta patience

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    super, ca fonctionne, MERCI.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/03/2011, 18h29
  2. modification d'une cellule d'une JTable
    Par ballantine's dans le forum Composants
    Réponses: 8
    Dernier message: 08/01/2010, 11h42
  3. Modification d'une ligne d'un datagridview via checkbox
    Par DiamonDonald dans le forum Windows Forms
    Réponses: 7
    Dernier message: 08/04/2008, 23h42
  4. Ajout et modification d'une checkbox
    Par Tintou dans le forum VBA Word
    Réponses: 12
    Dernier message: 09/10/2007, 12h57
  5. [JTABLE]changer le statut d'une checkbox
    Par zozolh2 dans le forum Composants
    Réponses: 3
    Dernier message: 12/09/2006, 15h09

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