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 :

Composant par défault d'une JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut Composant par défault d'une JTable
    Bonjour,

    Je souhaite palier à des problèmes de comportement de ma Jtable (JXTable pour être précis) ...

    Pour cela je souhaiterais récupèrer le composant du renderer, mais ce depuis mon éditor ...

    En fait le but est que lors d'un double-clic sur ma cellule de JTable, le visuel ne change pas, mais que mon code soit traité (une frame modale apparait et attends la saisie) ...

    Donc j'ai essayé avec un JLabel dans mon AbstractCellEditor et de lui mettre les paramètres de mon renderer, mais ca ne marche pas ...

    Mon idée serait alors simplement, dans mon AbstractCellEditor, de récupèrer exactement le composant affiché (ma case quoi), de lui mettre un mouseListener au passage, et de l'afficher comme composant de l'editor !

    Tout serait invisible, mais le clic serait gèré ...

    J'ai besoin de faire ca dans l'éditor, car mon éditor est affecté à la volée selon le "type" de colonne (type perso) et cela peu changer ...

    Merci à vous !

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Les cases d'une JTable ne sont pas des composants swing, mais des renderers, c'est à dire des choses qui... n'existent pas Tu ne peux donc pas mettre d'écouteur.

    Pour t'en sortir, je te conseille de te documenter sur le fonctionnement de la JTable, lire les entrées de la FAQ sur le sujet (par exemple Quelle cellule de ma JTable a été cliquée ? devrait t'intéresser), et de lire How to Use Tables du tuto java qui contient de très intéressantes informations sur les renderers et les cases.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut
    Lol ... Merci pour les infos, mais j'ai déjà potassé pas mal les JTables ...

    Je croyais que JUSTEMENT l'on pouvais récupèrer le composant envoyé par le renderer d'une case ...

    Par exemple mon renderer renvoie un JLabel avec un BackGroundColoret un ForeGroundColor e nfonction de la nature de ma case ... Ce renderer est personnalisé ...

    Je voulais reprendre ce composant renvoyé par le renderer pour le réaficher directement dans l'éditor ...

    Faute de solution j'ai reproduit le comportement de mon renderer DANS mon editor, ainsi le composant est le même ... Mais c'est pas super je trouve comme solution, je voulais donc savoir si il existais mieux et plus optimisé !

    Apparement NON ... Ce n'est pas la mort du petit cheval comme dirait l'autre ... lol

    Merci quand même !

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Concernant le renderer, tu peux l'obtenir par getCellRenderer ; mais cet objet n'est qu'un support de dessin, même si c'est un composant au sens awt il n'est pas prévu pour être écoutable.

    Concernant une cellule éditable, la situation est différente ; je pense qu'on peut attacher des écouteurs dessus.

    Tel que je comprends ton soucis, je ne comprends pas

    Composant pour visualiser une cellule et composant pour éditer une cellule sont complètement différents. La seule façon de leur donner un visuel est de copier manuellement leurs caractéristiques visuelles, lorsque c'est approprié (et en général ça ne l'est pas, à mon avis).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rendererEditable.setBackground(renderer.getBackground());
    rendererEditable.setBorder(renderer.getBorder());
    ... etc ...

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut
    Oki merci pour les détails ...

    Je t'explique mon cas, que tu comprenne ...

    Une JTable, l'utilisateur clique sur une case, et la plutot que de rentrer en edition sur un JtextField, ou une checkbox, etc ... je veux qu'un composant à moi perso apparaisse, mais que le visuel de la case ne change PAS !

    Donc mon listener serait bien sur le composant du cellEditor ... Pas de soucis la dessus !

    Mais il faudrait donc, pour que la case ne change pas, que le visuel RENDERER = visuel EDITOR !

    Actuellement je crée un JLabel dans l'EDITOR, mais de la même facon que dans le RENDERER ... Ca marche, mais le composant est créé 2 fois ...

    C'est pour ca que je cherchais directement à le reprendre depuis le renderer ...

    Voila un mini algo qui serait exactement mon but :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public Component getTableCellEditorComponent(JTable maTable,
                                                     Object valeur,
                                                     boolean isSelected,
                                                     int ligne,
                                                     int colonne) {
    Object cellule = maTable.monRendererDeCellule(ligne,colonne);
    cellule.addMouseListener(new nomML());
    return cellule;
    }

  6. #6
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Dans l'hypothèse où ton renderer serait un JLabel, tu voudrais que l'on puisse éditer directement un JLabel ?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/08/2011, 13h22
  2. Réponses: 4
    Dernier message: 18/12/2009, 14h52
  3. afficher une ligne(par son numero) d'une JTable
    Par linouline dans le forum Composants
    Réponses: 7
    Dernier message: 27/05/2006, 14h11
  4. Lier deux composants par une fléche
    Par Mehdi Feki dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/04/2006, 12h02
  5. afficher une valeur par défault dans la combobox
    Par shadow31 dans le forum MFC
    Réponses: 6
    Dernier message: 09/01/2006, 17h25

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