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 :

[JTable] Incompréhension du modèle


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut [JTable] Incompréhension du modèle
    Bonjour,

    j'étudie le fonctionnement du composant JTable dans le tutoriel de Sun.

    http://java.sun.com/docs/books/tutor...nts/table.html

    J'en suis à la partie, création d'un model

    L'appli est TableDemo et le fichier source est TableDemo.java:

    http://java.sun.com/docs/books/tutor...TableDemo.java

    Comment fait-il pour mettre des cases à cocher dans la colonne vegetarien ?
    Apparemment cela vient de la méthode getColumnClass, car si on la mets entre commentaire, les cases à cocher sont remplacés par true ou false.
    Mais je ne vois pas comment il est spécifié de mettre des cases à cocher.
    Merci pour vos réponses.
    Ciao

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    C'est le comportement par défaut. Une colonne de type Boolean a pour renderer par défaut un composant de type JCheckBox.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut
    Bonjour,

    et comment puis-je faire si je souhaite modifier le composant ?

    Mais y a certaines choses que je ne comprends pas car si la méthode getColumnClass n'est pas définie alors les JCheckBox ne sont pas affichée.
    Et puis cette méthode n'est pas appelée par une instance de la classe, elle est juste implémentée.

    ++

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par etiennegaloup
    et comment puis-je faire si je souhaite modifier le composant ?
    Plus précisément, que veux-tu faire ?
    Citation Envoyé par etiennegaloup
    Mais y a certaines choses que je ne comprends pas car si la méthode getColumnClass n'est pas définie alors les JCheckBox ne sont pas affichée.
    Et puis cette méthode n'est pas appelée par une instance de la classe, elle est juste implémentée.?
    La méthode getColumnClass fait partie de l'interface TableModel spécifiant le modèle de table, donc à un moment donné il faudra bien la définir, que cette définition soit implicite (dans le cas où ton modèle dérive de AbstractTableModel ou est un DefaultTableModel), ou explicite (si tu implémentes toi-même ton modèle ou si tu redéfinis cette méthode).
    Ce n'est pas ton code qui appelle cette méthode, c'est le composant JTable directement, lorsqu'il doit par exemple déterminer quel est le renderer associé à la colonne.

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut
    Donc si je comprends bien et pour résumer,

    lorsque l'instance de la classe JTable doit définir le renderer associé à la colonne, elle fait appelle à la méthode getColumnClass. Et si la classe retournée est Boolean, l'instance de la classe JTable affiche un composant JCheckBox, car celui-ci est le renderer définit par défaut pour le type Boolean.
    C bien cela ?

    Et ses infos sont dispo dans le livre "Penser en Java" ?

    Et si je qu'en cas de type Boolean mettre un autre composant, il m'est tout à fait possible de le faire, en définissant mon propre modèle ?

    A côté de ça, je développe actuellement une petite application qui gère les transactions de mon compte bancaire.
    Chaque transaction est associé à une catégorie, "Restaurant", "Maisons", "Voitures", etc.
    Les transactions et les catégories associés sont stockées dans une base de données.
    Je souhaite utiliser un composant JTabbedPane et utiliser un onglet par catégorie. Sur chaque onglet, un objet JTable sera placé.
    Chaque JTable importera les données depuis la base de données.

    select * from transaction where categorie="RESTAURANT"
    La requête SQL sera la même, seul la catégorie changera selon l'onglet choisie.
    Ma question serait de savoir s'il est possible de faire ceci très facilement rien qu'en développant mon propre modèle.
    Par exemple, je me dis que je pourrais définir dans mon modèle la source des données pour la JTable et en définissant un paramètre, de définir la catégorie.
    Donc je pense développer une sous-classe de JTable avec un modèle bien particulier, et ensuite instancié cette classe pour chaque onglet.

    Qu'en pensez-vous ?

    ++

  6. #6
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    lorsque l'instance de la classe JTable doit définir le renderer associé à la colonne
    lorsque l'instance de la classe JTable doit définir le renderer par défaut pour un type d'objet.
    Et ses infos sont dispo dans le livre "Penser en Java" ?
    Je ne pense pas, c'est un livre qui se veut généraliste et qui n'approfondit pas Swing, cela remplirait un livre à part entière (il en existe d'ailleurs).
    Et si je qu'en cas de type Boolean mettre un autre composant, il m'est tout à fait possible de le faire, en définissant mon propre modèle ?
    Soit en modifiant la méthode getColumnClass() pour retourner autre chose que Boolean, soit en installant son propre renderer sur la ou les colonnes concernées, soit en redéfinissant le renderer par défaut pour le type Boolean.
    Pour le reste, un seul modèle de table devrait suffire (puisque les colonnes sont les mêmes quelle que soit la catégorie), et tu disposes de plusieurs instances de JTable, une pour chaque onglet.

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut
    Ok merci pour toutes ces infos,

    Citation Envoyé par herve91
    Et ses infos sont dispo dans le livre "Penser en Java" ?
    Je ne pense pas, c'est un livre qui se veut généraliste et qui n'approfondit pas Swing, cela remplirait un livre à part entière (il en existe d'ailleurs)
    et sinon je vais trouver ces infos sur le site de sun je suppose.

    Merci
    ++

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

Discussions similaires

  1. JTable, XML et modèles
    Par dimou59 dans le forum Composants
    Réponses: 13
    Dernier message: 09/04/2011, 08h19
  2. JTable et son modèle en utilisant Netbeans
    Par maparè dans le forum Composants
    Réponses: 4
    Dernier message: 11/03/2010, 15h28
  3. [JTable]Affichage avec un modèle dynamique impossible
    Par leminipouce dans le forum Composants
    Réponses: 4
    Dernier message: 07/02/2006, 19h42
  4. pb passage de paramètre à un modèle de Jtable
    Par rollbich dans le forum Composants
    Réponses: 3
    Dernier message: 26/01/2006, 17h39
  5. [JTable] Problème avec le modèle
    Par etiennegaloup dans le forum Composants
    Réponses: 2
    Dernier message: 20/09/2005, 16h25

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