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 :

[SWING] TableModel hétérogène


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Benav
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 48
    Par défaut [SWING] TableModel hétérogène
    D'après ce que j'ai pu comprendre, l'unité de base dans un tableau Swing est la colonne. Ce qui justifie par exemple que dans l'interface TableModel la méthode getColumnClass serve au renderer (Dîtes moi si j'ai mal compris la chose).

    Dès lors, comment puis je faire pour avoir une colonne contenant des cellules de booleéns, des cellules de texte, des cellules de doubles qui soient traités comme tels par un renderer et un editor ?

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    j'ai eu ce problème il n'y a pas trop longtemps ..

    voir ici


    http://<br /> http://www.developpez...898&highlight=

  3. #3
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,
    Je crois que tu as mal compris la chose.
    getColumnClass() est un raccourci parfois pratique, mais les renderer et editor peuvent donner des résultats différents pour chaque cellule.

    La preuve est qu'en entrée des fonctions getTableCellRenderer/EditorComponent, on a :
    - la JTable,
    - l'objet contenu dans la cellule (donc son type, testable avec instanceof),
    - les coordonnées et propriétés de la cellule,

    - mais rien concernant la colonne.

    Pour avoir des colonnes contenant différents types de variables, il suffit de les ajouter simplement. Les renderer/editor par défaut devraient bien s'en sortir.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  4. #4
    Membre averti Avatar de Benav
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 48
    Par défaut
    Pour avoir des colonnes contenant différents types de variables, il suffit de les ajouter simplement. Les renderer/editor par défaut devraient bien s'en sortir.
    En fait, non; en ajoutant mes valeurs telles qu'elles, j'obtiens une colonne contenant par exemple 'true,false,2"... Si mes colonnes étaient homogènes, en utilisant une classe héritant de AbstractTableModel et en lui spécifiant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            public Class getColumnClass(int c) {
                return getValueAt(0, c).getClass();
            }
    Tout fonctionnerait, mais dans une colonne hétérogène, ça ne fonctionne pas (et ça me semble normal).

    Comment dois m'y prendre, créer un cellRenderer spécifique ? Comment ?

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    t'as été voir sur le lien que je t'ai cité ??

    Je pense qu'il y a toutes les réponses

  6. #6
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137

  7. #7
    Membre averti Avatar de Benav
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 48
    Par défaut
    Merci sincèrement pour ton aide, mais je ne vois pas comment adapter ça au problème que je rencontre.

  8. #8
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Je me suis un peu avancé sur le coup des renderer par défaut, et je trouve ça étrange.
    Apparemment, il te faut définir ton propre renderer comme ça :
    - le renderer étend JPanel avec un FlowLayout
    - si le paramètre value est un booléen (instanceof Boolean), tu ajoutes une JCheckBox
    etc, etc
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  9. #9
    Membre averti Avatar de Benav
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 48
    Par défaut
    Alors aiguillé par vos suggestions à tous deux, j'ai poursuivi mes investigations. En fait il faut surcharger la méthode 'public TableCellRenderer getCellRenderer()' de la JTable
    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
    DefaultTableCellRenderer renderer = new DefaultTableCellRenderer() {
    		  public Component getTableCellRendererComponent(JTable table, Object value,
    		                          boolean isSelected, boolean hasFocus, int row, int column) {
    		    if (value instanceof Boolean) {
    		    	JCheckBox checkBox = new JCheckBox();
    		    	checkBox.setSelected(((Boolean)value).booleanValue());
    		        checkBox.setHorizontalAlignment(JLabel.CENTER);
    		        return checkBox;
    		    }
    		    else
    		    {
    		    	Component c = super.getTableCellRendererComponent(table, value,
                            isSelected, hasFocus, row, column);
    		    	return c;
    		    }
    		  }
    		}; 
     
    	public TableCellRenderer getCellRenderer(int row, int column){
    			return renderer;
    	}
    Dans cet exemple, pas encore d'editor, et seuls les boolean sont gérés particulièrement. Mais maintenant que j'ai le principe, le reste coulera de source.

    Pour infos, cette page m'a particulièrement aidé dans ce cas:
    http://www.crionics.com/products/opensource/faq/swing_ex/JTableExamples2.html

    Merci de votre aide !

  10. #10
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    oui mais "ton instance of value" te retourner ce que tu as implémenté dans ton getColumn class.... c'est à dire dans le colonne 1 une comboBos etc..

    Allez vois le lien que j'ai donné, il y a la solution ..

    Il faut faire son propre editor qui va retourner un JComponent (checkbox, comboBox ....)
    ensuite sur le setValue on fait le instance of... et le tour est joué

  11. #11
    Membre averti Avatar de Benav
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 48
    Par défaut
    Citation Envoyé par PoPeio
    oui mais "ton instance of value" te retourner ce que tu as implémenté dans ton getColumn class.... c'est à dire dans le colonne 1 une comboBos etc...
    Non non, là ça tourne chez moi avec des checkbox pour les booleans, du texte pour le texte... tout ça dans la même colonne. Le dernier exemple du lien que je fournis est assez clair et efficace.

  12. #12
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    OUPS !! excuse moi .. tu as raison !!!

    en fait j'ai confondu c'est lorque tu joues avec les éditeurs que cela ne fonctionne plus et qu'il faut utilise ma méthode !!

    mais pour les renderer mea culpa !!

  13. #13
    Membre averti Avatar de Benav
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 48
    Par défaut
    Je reviendrais mettre ici un exemple complet (renderer + editor) dès que possible, histoire que ça puisse servir à d'autres.

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

Discussions similaires

  1. [Swing]JTable- Dimensionner les colonnes
    Par loutfi dans le forum Composants
    Réponses: 12
    Dernier message: 01/07/2011, 08h50
  2. [swing/TableModel]stockage
    Par Lethal dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 01/04/2006, 11h19
  3. [Java Swing]JButton avec TableModel
    Par dim_italia dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 20/02/2006, 21h04
  4. [SWING]jTable + Focus
    Par chady dans le forum Composants
    Réponses: 5
    Dernier message: 27/02/2003, 14h51
  5. [SWING][FONT] choisir la police par défaut
    Par narmataru dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/02/2003, 10h35

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