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] Problème avec TableCellEditor et TableCellRenderer


Sujet :

Composants Java

  1. #1
    T2!
    T2! est déconnecté
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 46
    Par défaut [JTable] Problème avec TableCellEditor et TableCellRenderer
    Bonjour,

    J'ai créé une Jtable avec une colonne booléenne. Naturellement, j'ai utilisé un JCheckBox pour assurer l'affichage et la saisie des booléens. Or j'ai un problème assez curieux. Lorsque je change l'état d'un CB, il suffit que j'aille dans une case d'une autre colonne pour que le CB revienne à son état initial... Est-ce un problème d'affichage ou un problème d'édition (ou les deux!). Ou bien encore un problème de synchronisation avec la JTable à laquelle j'ai associé ma propre implémentation d'AbstractTableModele.

    Merci d'avance

    Voici le code de mes deux composants :

    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
     
    class AffichageCelluleVisibilite implements TableCellRenderer{
     
    	private	JCheckBox	checkBox = null;	
     
     
    	public JCheckBox getCheckBox() {
    		if (checkBox == null) {
    			checkBox = new JCheckBox();		
    		}
     
    		return checkBox;
    	}
     
     
    	public Component getTableCellRendererComponent(JTable table, Object value,
    			boolean isSelected, boolean hasFocus, int row, int column) {
     
    		if (value!=null) {
    			Boolean b = (Boolean) value;
    			getCheckBox().setSelected(b.booleanValue());
    		}
     
    		return getCheckBox();
    	}
    }
     
     
    class EditionCelluleVisibilite extends AbstractCellEditor implements TableCellEditor {
     
    	private JCheckBox	checkBox = null;
     
    	public JCheckBox getCheckBox() {
    		if (checkBox == null) {
    			checkBox = new JCheckBox();			
    		}
     
    		return checkBox;	
    	}	
     
    	@Override
    	public boolean shouldSelectCell(EventObject arg0) {
    		return false;
    	}
     
    	public Component getTableCellEditorComponent(JTable table, Object value,
    			boolean isSelected, int row, int column) {
     
    		return getCheckBox();
    	}
     
    	public Object getCellEditorValue() {
    		return new Boolean(getCheckBox().isSelected());
    	}
     
     
    }

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public Component getTableCellEditorComponent(JTable table, Object value,
    			boolean isSelected, int row, int column) {
     
    		if (value!=null) {
    			Boolean b = (Boolean) value;
    			getCheckBox().setSelected(b.booleanValue());
    		}
    		return getCheckBox();
    	}

  3. #3
    T2!
    T2! est déconnecté
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 46
    Par défaut
    Désolé, ça ne marche pas... Faut-il implémenter un écouteur pour le CB ? Je l'ai déjà vu dans certains exemples, mais cela me paraît assez curieux !

    T2!

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Oui rajoute ceci dans getCheckBox() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    checkBox.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
            stopCellEditing();
       }
    });

  5. #5
    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
    Les booléens sont gérés de manière native par JTable avec le DefaultTableModel. Pas besoin de coder son renderer/editor spécial.

    Il suffit d'overrider la méthode getColumnClass(...) du DefaultTableModel pour qu'elle renvoie Boolean.class pour l'index de colonne désiré.

  6. #6
    T2!
    T2! est déconnecté
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 46
    Par défaut
    Pour herve91, merci c'est ok.

    Pour natha, je suis obligé de définir mon propre AbstractTableModel...

    Merci à tous.
    T2!

  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
    Ca ne change rien. Je me suis mal exprimé. Ton TableModel doit être modifié comme je l'ai dit (getColumnClass). Le renderer et l'editor pour Boolean est déjà intégré dans JTable.

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

Discussions similaires

  1. [JTable] Problèmes avec les lignes
    Par bonui13 dans le forum Composants
    Réponses: 8
    Dernier message: 28/03/2007, 13h59
  2. [JTable]Probleme avec TableCellEditor
    Par vinceLeBarbare dans le forum Composants
    Réponses: 2
    Dernier message: 13/06/2006, 13h13
  3. [JTable] Problème avec getValueAt
    Par flames dans le forum Composants
    Réponses: 2
    Dernier message: 24/05/2006, 22h27
  4. [JTable] Problème avec le modèle
    Par etiennegaloup dans le forum Composants
    Réponses: 2
    Dernier message: 20/09/2005, 16h25
  5. [JTable] Problème avec la couleur de fond
    Par ellocin dans le forum Composants
    Réponses: 5
    Dernier message: 13/09/2005, 23h07

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