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 :

Création de tableaux (JTable) avec Swing [Tutoriel]


Sujet :

Composants Java

  1. #21
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour ce tuto, il m'a bien aidé =D

    J'ai tout de même une question.

    J'ai 2 JTable qui sont censées afficher certaines informations enregistrées dans 2 listes différentes.
    Mon code fonctionnait pour l'affichage d'une JTable (merci ), mais je me suis retrouvé coincé pour la deuxième.

    Je poste une partie simplifiée de mon code source, puis je poserais ma question.

    Un première classe qui représente un attribut :
    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
    public class ClassDiagramClassAttribute
    {
    	private int idAttribute;
    	private String name;
    	private String type;
    	private String value;
    	private String visibility;
            ...
     
        public ClassDiagramClassAttribute()
        {
     
        }
    ...
    Mes getters et setters
    ...
    }

    Un deuxième classe qui représente une opération :
    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
    public class ClassDiagramClassOperation
    {
    	private int idOperation;
    	private String name;
    	private String type;
    	private String visibility;
            ...
     
        public ClassDiagramClassOperation()
        {
     
        }
    ...
    Mes getters et setters
    ...
    }
    Une troisième classe qui représente une classe (UML) :
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    public class ClassDiagramClass extends AbstractTableModel
    {
    	private int idClass;
            ...
     
    	private List<ClassDiagramClassAttribute> attribute = new ArrayList<ClassDiagramClassAttribute>();
        private String[] columnNamesAttribute = {"", "Nom", "Type"};
     
    	private List<ClassDiagramClassOperation> operation = new ArrayList<ClassDiagramClassOperation>();
        private String[] columnNamesOperation = {"Nom", "Type", "Visibilité"};
     
        public ClassDiagramClass()
        {
     
        }
    ...
    Mes getters et setters
    ...
    	public void setAttribute(List<ClassDiagramClassAttribute> attribute)
    	{
    		this.attribute = attribute;
    	}
    	public List<ClassDiagramClassAttribute> getAttribute()
    	{
    		return attribute;
    	}
     
    	public void setOperation(List<ClassDiagramClassOperation> operation)
    	{
    		this.operation = operation;
    	}
    	public List<ClassDiagramClassOperation> getOperation()
    	{
    		return operation;
    	}
     
     
        public int getRowCount()
        {
    //************************* ICI ***************************
        		return getAttribute().size();
        		return getOperation().size();
        }
     
        public int getColumnCount()
        {
    //************************* ICI ***************************
        		return columnNamesAttribute.length;
        		return columnNamesOperation.length;
     
        }
     
        public String getColumnName(int columnIndex)
        {
    //************************* ICI ***************************
        		return columnNamesAttribute[columnIndex];
        		return columnNamesOperation[columnIndex];
        }
     
        public Object getValueAt(int rowIndex, int columnIndex)
        {
    //************************* ICI ***************************     
             if (columnIndex == 0)
            	return getAttribute().get(rowIndex).isKey();
     
            else if (columnIndex == 1)
                return getAttribute().get(rowIndex).getName();
     
            else if (columnIndex == 2)
                return getAttribute().get(rowIndex).getType();
     
            else
                return null; //Ne devrait jamais arriver
     
    //************************* ICI ***************************
            if (columnIndex == 0)
            	return getOperation().get(rowIndex).getName();
     
    		else if (columnIndex == 1)
    			return getOperation().get(rowIndex).getType();
     
            else if (columnIndex == 2)
                return getOperation().get(rowIndex).getVisibility();
     
            else
                return null; //Ne devrait jamais arriver
        }
    ...
    }
    Voilà.
    Etant encore débutant en Java, je m'excuse d'avance si mon code est mal écrit, et pour mes explications surement boiteuses. ='

    Donc mon problème est :
    Dans les méthodes getRowCount(), getColumnCount(), getColumnName(int columnIndex) et getValueAt(int rowIndex, int columnIndex), si on retire le/les return de trop, ça marche ( Je peux soit afficher mon JTable d'attributs, soit mon JTable d'opérations )
    Mais, j'aimerais afficher les deux. ( d'où les /*** ICI ***/ )

    Donc, est-ce-que vous connaissez un moyen afin de réaliser cela ? ( J'espère bêtement un simple if, mais on peut toujours rêver =' )
    Si non, avez-vous une idée à me proposer ?

    Merci d'avance, et bonne soirée.

    PS : Je ne sais pas si ça peut aider, mais les JTable s'affichent dans deux JFrame différentes, qui sont elles mêmes dans un JTabbedPane.

  2. #22
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    je ferais trois abstractModel différent.

  3. #23
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse.

    J'ai testé ton idée et elle marche
    Enfin, ça marche même pour deux AbstractTableModel ( Dans mon code, dans les classes ClassDiagramClassAttribute et ClassDiagramClassOperation, au lieu de ClassDiagramClass )

    Mais du coup, même si ça me plaît pas trop, j'en ai tout de même trois : j'ai une méthode permettant d'ajouter mon attribut/opération dans sa liste et aussi dans la JTable ; ça me faisait bizarre d'ajouter un attribut/opération dans la même class qui contient ses informations

  4. #24
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    Comme toujours, tout est possible en java. Le problème c'est de choisir.

  5. #25
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    Je cherchait justement une bonne solution d'affichage de tableau... et je suis tombé sur ton tutoriel qui est parfaitement clair à mes yeux.

    Merci et beau boulot, tu vas me faire gagner pas mal de temps
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  6. #26
    Futur Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Soucis
    Bonjour Baptiste

    merci déjà pour ton tuto très sympa, il m'a fait progresser pas mal.

    Ai un peu eu du mal car j'ai du adapter mon exercice. Mais ca en valait la peine. Jusque là (point 5), ca fonctionne très bien.

    Merci j'espère que tu feras d'autres tuto

  7. #27
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Bonjour et félicitations,

    Très bon article, associé à des remarques excellentes.

    J'y fais référence dans mes cours, ainsi que dans un prochain article.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  8. #28
    Membre actif Avatar de kalina
    Femme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 220
    Points : 293
    Points
    293
    Par défaut
    salut et merci pour l'article, ça va beaucoup m'aider car j'utilise souvent les JTables. Cependant j'aurais une petite question idiote: serait-il possible de supprimer une ou plusieurs cellules notamment sur la dernière ligne?
    je m'explique :par exemple si la dernière cellule de la dernière ligne correspond au total de ma denière colonne et qu'il n'ya rien à afficher sur les cellules qui précèdent le total, ben moi j'aurais voulu pouvoir les enlever tout bêtement!
    voilà, j'espère m'être bien expliquée!
    sinon merci et bonne continuation

  9. #29
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 7
    Points
    7
    Par défaut probleme affichage
    Bonjour,

    Merci pour ce tuto, il est bien foutu! ;-)

  10. #30
    Membre actif Avatar de aljessy
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2010
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 319
    Points : 200
    Points
    200
    Par défaut
    Bonjour, tout d'abord merci pour ce tutoriel. Mais j'ai un petit problème. En fait je me suis basé sur ce tutoriel pour créer un tableau à trois colonnes et parmi l'une des colonnes, j'ai l'une qui contient un checkbox. Je n'arrive pas à pouvoir décocher le checkbox une fois que je clique dessus. voici à quoi ressemble ma méthode getColumnClass.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     public Class getColumnClass(int columnIndex){
            switch(columnIndex){
                case 0:
                    return Color.class;
                case 2:
                	return Boolean.class;
                default:
                    return Object.class;
            }
        }
    Maintenant comment faire pour que l'on puisse editer ce checkbox? J'ai penser à crée une méthode qui étend un DefaultTableCellRenderer mais je ne sais pas comment l'implémenter et même si c'est le meilleur moyen de proceder
    Faire aisément ce qui est difficile aux autres, voilà le talent. Faire ce qui est impossible au talent, voilà le génie.

  11. #31
    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
    Pas besoin de ça. Normalement, par défaut, la JTable te met bien une JCheckBox éditable pour les colonnes renvoyant Boolean.class.

    As tu pensé à rendre ta colonne éditable dans ton modèle (renvoyer true dans la méthode isCellEditable pour la colonne en question)
    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.

  12. #32
    Membre actif Avatar de aljessy
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2010
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 319
    Points : 200
    Points
    200
    Par défaut
    As tu pensé à rendre ta colonne éditable dans ton modèle (renvoyer true dans la méthode isCellEditable pour la colonne en question)
    Oui je l'ai fait sauf que ma colonne n'est toujours pas éditable. Pour plus de précision, mon tableau a trois colonnes la première recoit une couleur, la seconde une chaine de caractère et la troisième un booléen. voici l'instruction de j'utilise pour ajouter une ligne à mon tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lignes.add(new LigneTab(Color.blue, evt.getIdOM(), new Boolean(true)));
    et voici mes méthode getValuesAt(..) et isCellEditable(..)

    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
    @Override
    	public Object getValueAt(int rowIndex, int columnIndex) {
    		switch (columnIndex) {
    			case 0:
    				return lignes.get(rowIndex).getCouleur();
    			case 1:
    				return lignes.get(rowIndex).getAvatar();
    			case 2:
    				return lignes.get(rowIndex).isAffiche();	
    			default:
    				return null;
    		}
     
    	}
     
    	public boolean isCellEditable(int rowIndex, int columnIndex) {
            if (columnIndex > 1) {
                return true;
            } else {
                return false;
            }
        }
    D'où peut venir mon problème
    Faire aisément ce qui est difficile aux autres, voilà le talent. Faire ce qui est impossible au talent, voilà le génie.

  13. #33
    Membre actif Avatar de aljessy
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2010
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 319
    Points : 200
    Points
    200
    Par défaut
    J'ai résolu mon problème. juste que j'avais oublier la fonction setValueAt(..)
    Faire aisément ce qui est difficile aux autres, voilà le talent. Faire ce qui est impossible au talent, voilà le génie.

  14. #34
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Cet article est très intéressant, merci !

  15. #35
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Très bon tuto, cela m'a beaucoup aidé dans mon projet.

    Une petite question : j ai transformé le code pour gérer une filmothèque.
    Tout fonctionne, mais j'utilise une des colonnes pour afficher une affiche de film (ImageIcon).

    J'ai comme résultat le haut de l'affiche affiché sur la hauteur de la ligne du tableau. Comment adapter la hauteur des lignes par rapport aux composants ?

    Merci, et bravo pour ce tuto.

  16. #36
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 30
    Points : 24
    Points
    24
    Par défaut Création interface graphique avec Swing : les tableaux (JTable)
    Très bon tuto, step by step, bien écrit et expliqué.

  17. #37
    Membre habitué
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 86
    Points : 174
    Points
    174
    Par défaut
    C'est du très beau travail @Baptiste
    Si mon message t'a aidé, un petit ne fera pas de mal
    Pensez aussi à

  18. #38
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut Un grand merci!!
    Merci pour ce tuto très bien fait et complet.
    J'ai enfin compris comment construire correctement une JTable.

  19. #39
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    Un grand Merci a Baptiste Wicht. Il y a plusieurs jours de cela je souhaitait utiliser les tableaux dans mon projet et je ne parvenait pas a trouver un tuto qui m'expliquerait comment cela fonctionne, jusqu'à ce que je tombe sur cet article de Baptiste Wicht et pour tout vous dire, je suis vraiment satisfait. Merci encore.

  20. #40
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Je suis débutant en Java...j'ai essayé de suivre le tutoriel...j'arrivais à tout comprendre jusqu'au drame le chapitre 5 sur l'affichage des cellules...faut-il créer des classes différentes (ColorCellRenderer, SexeCellRenderer,etc..) ou l'intégrer dans une classe déjà définie??

    Je vous remercie par avance de vos réponses...pour me permettre de grandir

    Merci d'avance

Discussions similaires

  1. Importer une liste dans une JTable avec SWING
    Par samibipbip dans le forum Composants
    Réponses: 6
    Dernier message: 26/10/2011, 07h20
  2. Réponses: 0
    Dernier message: 09/05/2011, 14h50
  3. [Article] Création de tableaux (JTable) avec Swing
    Par Baptiste Wicht dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 20/12/2009, 21h50

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