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

AWT/Swing Java Discussion :

[JXTreeTable] Modele dynamique


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut [JXTreeTable] Modele dynamique
    Bonjour,

    je travail sur un composant amélioré du jxtreetable. Je cherche a obtenir un modele dynamique. j'entend par la la possibilité d'ajout de colonne.

    une tite image pour exemple :



    voici comment je procede pour cet ajout dynamique :

    la methode d'ajout d'une colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public void addColumnModel(ITreeColumnModel model){
            columns.add(model);
            columnNames.add( model.getName() );
            setColumnIdentifiers(columnNames);
                    model.getTableColumn().setModelIndex(columns.indexOf(model)+1);        
     
            tree.getColumnModel().addColumn(model.getTableColumn());
            tree.revalidate();
        }
    une classe qui défnit un modele de colonne :
    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
     
    public class DefaultVisibleColumn implements ITreeColumnModel{
     
        private boolean edit = true;
        private TableColumn col = new TableColumn();
     
     
        public DefaultVisibleColumn() {
            ColumnHeader head1 = new ColumnHeader(TB.getString("col_visible"),new JLabel( IB.getIcon("open_eye") ));
            TableCellRenderer headerRenderer = new HeaderRenderer(head1);
     
            TableCellRenderer cellRenderer = new JContextTreeRenderer(new ButtonProvider()) ;
     
            col.setHeaderValue(head1);
            col.setHeaderRenderer(headerRenderer);
            col.setCellRenderer(cellRenderer);
            col.setResizable(false);
            col.setMaxWidth(25);
            col.setMinWidth(25);
            col.setPreferredWidth(25);
            col.setWidth(25);
        }
     
     
        public void setValue(Object target, Object value) {
            if(target instanceof MapLayer && value instanceof Boolean)
                ((MapLayer)target).setVisible((Boolean)value);
        }
     
        public Object getValue(Object target) {
     
            if(target instanceof MapLayer)
                return ((MapLayer)target).isVisible();
            else
                return "n/a";
        }
     
        public String getName() {
            return TB.getString("col_visible");
        }
     
        public boolean isEditable() {
            return edit;
        }
     
        public boolean isCellEditable(Object target){
     
             if(target instanceof MapLayer)
                return edit;
            else
                return false;
        }
     
        public void setEditable(boolean edit) {
            this.edit = edit;
        }
     
        public Class getColumnClass() {
            return Boolean.class;
        }
     
        public TableColumn getTableColumn() {
            return col;
        }
     
    }

    jai deux probleme :

    1) quand on regarde l'image on voit que sur le popupmenu on ne peut pas désafficher les 2 colonnes (visible et symbole). de même si j'utilise une des actions en dessous, j'obtiens des erreurs. Ce qui me laisse a penser que la nouvelle colonne n'est pas bien inséré dans le modele.

    2) le renderer a utiliser pour la nouvelle colonne est incorrect.
    la classe TableColumn permet de définir des renderes classiques, mais ceux d'un jxtreetable sont différents, l'apparence (highlight...etc...) n'est donc pas correct.


    le source complet est disponible en svn ici : http://subversion.developpez.com/pro...outil/v1/trunk

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    *up*

    svp


    ps: sinok si tu passes par la, help.

  3. #3
    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
    Salut, j'suis un peu en pleine bourre niveau taf donc j'ai pas beaucoup de temps aujourd'hui (en ce moment en général)

    Pour le 1 çà doit venir du fait que tu ajoutes une simple TableColumn (objet Swing) au lieu d'une TableColumnExt (la version SwingX) comme delegate dans ta classe DefaultVisibleColumn.

    Pour le 2 bah faut voir, j'ferais un checkout ce soir et je verrais si j'ai un peu de temps.

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut


    merci deja pour le tablecolumnExt, ca regle deja le plus important.


    pour les renderers :
    forum swinglab :
    > 2) how do i define a correct cellRenderer for the new columns with the TableColumn? to keep a correct rendering (highlights ...).

    can't tell without more details What's the JContextTreeRenderer?
    Typically, in swingx you don't implement/subclass the renderers.
    Instead, do the config in a custom provider. That way, you can re-use it
    across all collection components in the defaultXXRenderers.

    TableCellRenderer tr = new DefaultTableRenderer(myProvider);
    ListCellRenderer lr = new DefaultListRenderer(myProvider);
    TreeCellRenderer tc = new DefaultTreeRenderer(
    new WrappingProvider(myProvider));
    on me dit d'utiliser les renderers par defaut. seulement je dois faire mes propres renderers. Et deux : comment ca marche ce "provider"?

  5. #5
    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
    Basiquement pour les provider c'est ce que j'avais mis en place pour résoudre tes problème il y a un mois de çà.

    J'avais écris un renderer s'inspirant très fort des DefaultRenderer SwingX permettant de renvoyer le composant contenu par un Provider au choix.

    Grosso merdo un Provider en un Composant Swing possédant des méthodes bien spécifiques(regardes un peu le code que j'avais pondu, et éventuellement le code des provider fournis dans Swingx).
    Enfin c'est mieux expliqué dans la doc
    http://swinglabs.org/hudson/job/Swin...tProvider.html

    Et puis pour faire un pack sur les colonnes par le code tu as la méthode packAll héritée de la JXTable (cf topic sur le forum de Swinglabs)

    ++

  6. #6
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    Et puis pour faire un pack sur les colonnes par le code tu as la méthode packAll héritée de la JXTable (cf topic sur le forum de Swinglabs)
    cf : http://developpez.net/forums/showthread.php?t=393950


    je jete un oeil aux providers et renderer debut d'aprem. je vais essayer de regler ca.


    merci sinok. et désolé d'avoir pris sur ton temps au boulot

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

Discussions similaires

  1. [ZF 1.11] Zend Models dynamique
    Par Nowwis dans le forum Zend Framework
    Réponses: 2
    Dernier message: 10/02/2012, 11h55
  2. modele pour JXTreeTable
    Par dawaman dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 26/07/2010, 09h29
  3. [OL-2007] Modele d'email Image dynamique
    Par islogged dans le forum Outlook
    Réponses: 0
    Dernier message: 28/04/2009, 20h38
  4. Probleme JList / JList Model / Evolution dynamique
    Par SebastianPx dans le forum Composants
    Réponses: 1
    Dernier message: 10/02/2009, 12h14
  5. des models dynamiques
    Par penguin50 dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 09/05/2008, 11h54

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