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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut Création de tableaux (JTable) avec Swing
    Bonsoir,

    Je viens de finir un tutoriel Java sur Swing : Création interface graphique avec Swing : les tableaux (JTable)

    Je tente d'expliquer les différents concepts liés à l'utilisation de tableaux en Swing. Dans cet article, nous verrons donc les concepts de base du composant JTable, la définition de modèle de tableaux, la modification dynamique du contenu du tableau, la façon de modifier l'affichage des différentes cellules du tableau, la modification directe du contenu du tableau et finalement le tri et le filtrage du tableau.

    En espérant qu'il vous soit utile

    Baptiste Wicht

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    Pas mal de fonctionnalité, avec du bon code réutilisable. Beau travail !

    J'en profite quand même pour réintroduire mon vieil article sur les JTables, plus court, et différent (moins de fonctionnalités, et un poil plus de TableColumn et Events).

    J'adore la programmation Swing, c'est très agréable à programmer. Dommage que ce soit obsolète pour x raisons étranges.

  3. #3
    Membre très actif Avatar de vintz72
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 154
    Par défaut
    Citation Envoyé par nicorama Voir le message
    Pas mal de fonctionnalité, avec du bon code réutilisable. Beau travail !
    [...]
    J'adore la programmation Swing, c'est très agréable à programmer. Dommage que ce soit obsolète pour x raisons étranges.
    Bien d'accord pour le premier point.
    Pour le second... bof. J'avoue que je m'y suis habitué, et il y a des aspects sympas, mais en somme, je trouve quand même plutôt lourd le Swing. Il faut souvent parcourir plusieurs objets avant d'obtenir une information triviale (ex récent pour moi: je voulais définir un renderer spécial sur une colonne donnée. Le faire pour une classe donnée n'était pas possible étant donné que plusieurs colonnes sont de type "Date". Et bien il faut éplucher la Javadoc pour trouver qu'il faut passer par le TableModel pour récupérer la bonne colonne ! J'ai eu des exemples pires, mais je ne me rappelle plus en détail). En outre, il manque une vision haut niveau du paradigme MVC. J'utilise un framework propriétaire pour palier cela, mais de base, Swing, ça manque quand même de beaucoup de choses.
    A sa décharge, il est vrai qu'il est plus ou moins abandonné par Sun au profit de JavaFX... le même tutoriel (sur les JTable) avec ce dernier serait intéressant !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Par défaut un grand merci
    Bonjour,

    Pour mon projet, je galère un peu avec ces fameuses jTable ;o)

    Bon boulot !

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Par défaut Merci
    Merci pour l'article.

    La lecture du code source de la démo Swing fourni avec le JDK est aussi intéressante. C'est aussi dispo en Web Start sur : https://swingset3.dev.java.net .

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Très bon article sur les JTables ! Cela manquait



    J'ai deux petites remarques (mais c'est vraiment des bricoles --- j'aime bien chipoté ) :


    Tu peux éviter de supprimer le texte des cellule avec setText("") tout simplement en évitant de passer "value" à la méthode parente, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class ColorCellRenderer extends DefaultTableCellRenderer {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, null, isSelected, hasFocus, row, column);
            setBackground( (Color)value );
            return this;
        }
    }



    Dans ton SexeCellRenderer tu précharges une fois pour toute les images pour éviter de les recréer à chaque appel. C'est bien mais on pourrait faire la même chose dans le BoldCellRenderer pour éviter de multiplier les créations de Font dérivée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class BoldCellRenderer extends DefaultTableCellRenderer {
     
    	private final Font boldFont = getFont().deriveFont(Font.BOLD);
     
    	@Override
    	public Component getTableCellRendererComponent(JTable table, Object value,
    			boolean isSelected, boolean hasFocus, int row, int column) {
    		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    		setFont(this.boldFont);
    		return this;
    	}
    }




    Enfin je finirais avec une petite astuce : il est possible d'alterner les couleurs de fond des cellules assez facilement. Par example pour alterner avec un jaune pale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UIManager.put("Table.alternateRowColor", new Color(255, 255, 204));
    Cela fonctionne tant qu'on ne modifie pas explicitement la couleur de fond et qu'on hérite bien de DefaultCellRenderer pour tous nos renderer (ce que je conseillerais d'ailleurs pour la plupart des renderers).

    Toutefois, il faut penser que cela impactera toutes les JTables de l'application...


    a++

  7. #7
    Membre confirmé

    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    149
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 149
    Par défaut
    Citation Envoyé par vintz72 Voir le message
    Pour le second... bof. J'avoue que je m'y suis habitué, et il y a des aspects sympas, mais en somme, je trouve quand même plutôt lourd le Swing. Il faut souvent parcourir plusieurs objets avant d'obtenir une information triviale (ex récent pour moi: je voulais définir un renderer spécial sur une colonne donnée. Le faire pour une classe donnée n'était pas possible étant donné que plusieurs colonnes sont de type "Date".
    Pas faux, ceci dit c'est aussi ce qui en fait sa puissance, on peut faire énormément de choses avec. Pour quelque chose de trivial si on ne connaît il faut certes chercher un peu (et encore avec la javadoc c'est facile), mais après on est bien content lorsqu'on veut quelque chose de vraiment "sur mesure".

    Citation Envoyé par vintz72 Voir le message
    En outre, il manque une vision haut niveau du paradigme MVC. J'utilise un framework propriétaire pour palier cela, mais de base, Swing, ça manque quand même de beaucoup de choses.
    Heu déjà pourquoi veux-tu une vision haut niveau ? Ce sont des éléments de bas niveau justement... le haut niveau c'est ton application, pas les composants. De toute façon la plupart des composants n'utilisent pas le pattern MVC qui pour toute une série de raisons n'est pas approprié à ce niveau-ci d'abstraction, mais bien un modèle-vue où le contrôleur et la vue ont été couplées. Bon heu... je n'ai peut-être pas compris ta remarque non plus


    Sinon j'applaudis l'idée de ce tuto déjà pas mal complet. Vu le temps que j'ai dû passer plongé dans la javadoc et dans les tutos Sun pour apprendre à correctement m'en servir... ça pourra sûrement en aider plus d'un !

  8. #8
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut Quelques remarques
    Merci , c'est un bon travail
    mais svp il manque un peu d'organisation de code, il faut indiquer où mettre chaque bout de code car ils sont séparés, et concernant le code de triage il n'a pas bien marché
    de même pour la modification de valeur de combobox de sport ;
    j'attends la modification de code

  9. #9
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par mysina.25 Voir le message
    Merci , c'est un bon travail
    mais svp il manque un peu d'organisation de code, il faut indiquer où mettre chaque bout de code car ils sont séparés, et concernant le code de triage il n'a pas bien marché
    de même pour la modification de valeur de combobox de sport ;
    j'attends la modification de code
    L'entier du code est téléchargeable au dernier chapitre. Ce serait trop lourd d'inclure à chaque fois le code entier. Il me semble dèja que les explications sur l'inclusion du code sont suffisamment claires. Je vais encore essayer d'améliorer cela pour la prochaine version de l'article.

  10. #10
    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

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

  12. #12
    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

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