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

AWT/Swing Java Discussion :

Pb avec DefaultCellEditor


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut Pb avec DefaultCellEditor
    Bonjour à tous!

    J'ai un soucis avec mon defaultCellEditor. J'ai un Jtable qui contient 5 champs, dont 2 sont composé de JCheckbox, et je n'arrive pas à éditer les JCheckbox.
    voici mon code :
    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
     
    String[] titre_colonnes = {"nom","prenom","adresse","to","cc"};
     
    		Object[][] list_complete=new Object [list.length][titre_colonnes.length];
     
    //On crée un nouveau tableau en insérant les composant JCheckbox
    //list est un tableau qui contient, le nom, prénom et l'adresse mail des contact
    		for(int i=0;i<list.length;i++)
    		{
    			for(int j=0;j<titre_colonnes.length;j++)
    			{
    				if(j==0 || j==1 || j==2)
    					list_complete[i][j]=list[i][j];
    				else
    					list_complete[i][j]=new JCheckBox("");
    			}
    		}
     
    		modele mon_modele = new modele(list_complete,titre_colonnes);
     
     
     
    		JTable jTable1 = new JTable(mon_modele);
    		//on ne permet pas de permutter les colonnes
    		jTable1.getTableHeader().setReorderingAllowed(false);
     
    		jTable1.getColumn("to").setCellRenderer(new checkboxRenderer());
    		jTable1.getColumn("to").setCellEditor(new checkboxEditor(new JCheckBox()));
    		jTable1.getColumn("cc").setCellRenderer(new checkboxRenderer());
    		jTable1.getColumn("cc").setCellEditor(new checkboxEditor(new JCheckBox()));
    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
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    class checkboxEditor extends DefaultCellEditor implements ItemListener 
    {
    	private JCheckBox button;
     
    	public checkboxEditor(JCheckBox checkBox) 
    	{
    		super(checkBox);
    	}
     
    	public Component getTableCellEditorComponent(JTable table, Object value,boolean isSelected, int row, int column) 
      	{
    		if (value==null) return null;
     
    		button = (JCheckBox)value;
    		/*cette instruction indique, que lorsqu'il y aura un changement sur le choix 
    		  avec le bouton button,la méthode ItemStateChanged de this sera invoquée*/
    		button.addItemListener(this);
    		System.out.println("on est dans la fonction getTableCellEditorComponent");
    		return (Component)value;
      	}
     
    	public Object getCellEditorValue() 
    	{
    		button.removeItemListener(this);
    		System.out.println("on est dans la fonction getCellEditorValue");
    		return button;
      	}
     
      	public void itemStateChanged(ItemEvent e) 
      	{
    		super.fireEditingStopped();
      	}
    }
    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
     
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.*;
     
     
    public class checkboxRenderer implements TableCellRenderer 
    {
    	public Component getTableCellRendererComponent(JTable table, Object value,
    				   boolean isSelected, boolean hasFocus, int row, int column) 
    	{
    		if (value==null) 
    			return null;
     
    		return (Component)value;
    	}
    }
    Merci d'avance!!!

  2. #2
    Membre éprouvé Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Par défaut
    Dans le Model de ta JTable il faut que tu surcharge la méthode isCellEditable(...) je pense

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    merci, je vais essayer ça

  4. #4
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    j'ai insérer la méthode :
    public boolean isCellEditable(int l, int c)
    {
    return true;
    }

    dans la classe checkboxEditor mais il n'y a aucun changement.Je n'arrive toujours pas à éditer mes cellules.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Je vois pas trop l'intérêt de surcharger tes renderer et tout le toutipm quand un simple Model hériatant de DefaultTableModel et surchargeant ma méthode GetColumnClass fait parfaitement l'affaire....

  6. #6
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    peut tu être plus explicite STP, car je ne comprends pas bien ce que tu veux dire.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765

  8. #8
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    merci, je vais essayer de faire comme tu me l'a indiquer.
    Mais je dois toujours utiliser mes classes renderer et cellEditor,non? je suis debutant en java!

  9. #9
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    c'est bon ça marche!!! merci

    Mais pourquoi lorsque j'implémente la fonction :
    public boolean isCellEditable(int l, int c)
    {
    return true;
    }

    dans abstractModel les cellule sont editable et pourquoi non lorsque la méthode est implémenté dans la defaultCellEditor.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Absolument pas, disons que pour cette fonctionnalité simple tu n'as pas besoi, de renderer ou d'editor (c'est déja présent dans ceux par défaut, il suffit juste de l'activer)
    Par contre ensuite si tu veux faire des choses un peu plus complexes, il faudra passer par un renderer et/ou un editor

  11. #11
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    je n'ai pas bien saisi ta réponse, lorsque tu dis "absolument pas", mais bon je vais pas te déranger plus avec ça, je vais consulter la doc pour trouver plus de détail.
    Merci pour ton aide qui m'a fortement aidé et surtout débloqué

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    rajoute un @override au dessus de ta méthode, sinon le absolument pas se référait au post précédent

  13. #13
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    @override, je ne sais pas c'est quoi.
    ok, pour le "absolument pas" mais du coup comment je peux insérer des cases à cocher sans passer passer par cellrender et cellEditor, est ce possible d'insérer les cases à cocher dans AbstractModel?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ba non tu passe un boolean dan ton model de table et ça te sort une checkbox

  15. #15
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    je ne comprends pas ce que tu veux dire, j'ai un peu de mal à te suivre.

  16. #16
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Août 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2002
    Messages : 44
    Par défaut
    Citation Envoyé par vidocq
    @override, je ne sais pas c'est quoi.
    Placé devant la signature d'une méthode, ca permet de préciser que tu redéfinis une méthode héritée.

  17. #17
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    mais d'après ce que j'avais compris, il n'y a pas besoin d'inclure @override pour redefinir une méthodes, non?
    Il suffit de réecrire la fonction tout simplement, non?

Discussions similaires

  1. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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