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 :

JXTreeTable et JButton


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 108
    Par défaut JXTreeTable et JButton
    Bonjour,

    j'ai fait le tour du forum et je n'ai pas vu de réponse ni même de pistes de recherche sur le problème que je me pose a tel point que je me demande si c'est réalisable... :s

    Pour l'instant j'ai un JXTreeTable décrit par son modèle (extends AbstractTreeTableModel).
    J'arrive a insérer des composants comme des JButton, des JCheckbox pour une colonne entière mais pas pour certaines cellules.. Par exemple, mettre des JButton dans la colonne 2 que si j'ai des feuilles dans ma première colonne...

    Est-ce que quelqu'un aurait une piste de recherche ?

    Merci d'avance,
    Noctis

  2. #2
    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
    C'est réalisable. Il faut par contre rentrer un peu plus loin dans la logique Swingx et comprendre que la façon de gérer les renderers est totalement différente. En effet, on ne crée plus de renderers en Swingx, on crée des classes héritant de ComponentProvider que l'on fournit à un Renderer standard Swingx (DefaultTableRenderer dans le cas présent).

    Dans ton cas il faut fournir un Provider un peu tricky dont le but est de renvoyer des Providers adéquats selon les différents cas. Par exemple dans ton cas il renverra un ButtonProvider quand la ligne est une feuille et un LabelProvider donc la valeur est nulle quand on se trouve au niveau d'un dossier.

    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
     
    package swingx;
     
    import javax.swing.JComponent;
     
    import org.jdesktop.swingx.renderer.CellContext;
    import org.jdesktop.swingx.renderer.ComponentProvider;
    import org.jdesktop.swingx.renderer.LabelProvider;
    import org.jdesktop.swingx.renderer.StringValue;
     
    public class MyProvider extends ComponentProvider<JComponent> {
     
        private LabelProvider emptyProvider;
        private ComponentProvider delegate;
     
        public MyProvider(ComponentProvider delegate) {
            super();
            this.delegate = delegate;
            StringValue sv = new StringValue() {
     
                public String getString(Object value) {
                    return "";
                }
     
            };
            emptyProvider = new LabelProvider(sv);
        }
     
        @Override
        public JComponent getRendererComponent(CellContext context) {
            return getComponentProvider(context).getRendererComponent(context);
        }
     
        private ComponentProvider getComponentProvider(CellContext context) {
     
            if ((context == null) || (!context.isLeaf())) {
                return emptyProvider;
            }
            return delegate;
        }
     
        @Override
        protected void configureState(CellContext context) {
            // do nothing - we delegate
     
        }
     
        @Override
        protected void format(CellContext context) {
            // do nothing - we delegate
     
        }
     
        @Override
        protected JComponent createRendererComponent() {
            return null;
        }
     
    }
    que tu utiliseras de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ComponentProvider myProvider = new MyProvider (
        new ButtonProvider());
    column.setCellRenderer(new DefaultTableRenderer(myProvider));
    Sachant que column correspond à la seconde colonne de ta JXTreeTable

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 108
    Par défaut
    Super ca fonctionne super bien

    Merci beaucoup

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

Discussions similaires

  1. [JButton] Mouvements souris + MousePressed
    Par Devil Redneck dans le forum Composants
    Réponses: 8
    Dernier message: 17/05/2004, 17h49
  2. Réponses: 5
    Dernier message: 17/05/2004, 15h29
  3. [JButton] ActionListenner, ActionPerformed
    Par ArchFolken dans le forum Composants
    Réponses: 6
    Dernier message: 04/05/2004, 10h41
  4. [debutant] ajouter ImageIcon dans un Jbutton
    Par agugu dans le forum Composants
    Réponses: 4
    Dernier message: 25/04/2004, 22h40
  5. Comment redimensionner un jbutton ?
    Par Ares dans le forum JBuilder
    Réponses: 13
    Dernier message: 29/09/2003, 16h42

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