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
    Nouveau 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
    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 très actif
    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 : 61
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

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

  3. #23
    Nouveau 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
    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 très actif
    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 : 61
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

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

  5. #25
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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
    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

  6. #26
    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
    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
    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 expérimenté 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
    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
    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
    Par défaut probleme affichage
    Bonjour,

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

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

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 319
    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

  11. #31
    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
    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)

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

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 319
    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

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

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 319
    Par défaut
    J'ai résolu mon problème. juste que j'avais oublier la fonction setValueAt(..)

  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
    Par défaut
    Cet article est très intéressant, merci !

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 21
    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 averti
    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
    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 éprouvé
    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
    Par défaut
    C'est du très beau travail @Baptiste

  18. #38
    Membre confirmé
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    126
    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 : 126
    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
    Invité de passage
    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
    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 averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    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, 08h20
  2. Réponses: 0
    Dernier message: 09/05/2011, 15h50
  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, 22h50

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