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 changer le background/foreground color


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Par défaut JXTreeTable changer le background/foreground color
    Bonjour à tous,

    Je tente, tant bien que mal, à changer le background color de ma JXTreeTable, chose que je fais d'habitude facilement avec une JTable.
    J'ai procédé comme ceci :
    - j'ai créé une inner-classe (pour accéder à ma JXTreeTable) qui étend de DefaultTableCellRenderer et j'ai redéfinie la méthode getTreeCellRendererComponent.

    Voici le code, qui est supposé changer la couleur de toutes les lignes qui sont de type BOQWoodwork :
    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
     
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                Object o = treeTable.getValueAt(row, -1); // Récupere le defaultMutableTreeTableNode à la ligne fourni en paramètre
                Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                if(o!=null){
                    DefaultMutableTreeTableNode node = (DefaultMutableTreeTableNode) o;
     
                    if(node.getUserObject() instanceof BOQWoodwork){
                        comp.setForeground(Color.BLUE);
                        comp.setBackground(Color.YELLOW);
     
     
                    }
                }
                return comp;
            }
    Malheureusement ca ne fonctionne uniquement quand je clique sur la ligne...comme ci l'appel était paresseux et pourtant si veux changer la couleur de toutes les cellules en appliquant cette méthode, ca fonctionne impec.

    Je n'y comprend rien, est ce que quelqu'un à une idée ?

    Merci et Bonne année avec un peu d'avance !

  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
    Les JXTable, JXLIst, JXTree et JXTreeTable proposent un mécanisme différent en ce qui concerne tout ce qui est modification d'apparence. En effet, il est déconseillé d'utiliser les Renderers standards sur ces composants, car il possèdent leur propre renderer customisé.

    Dans ton cas, il faut passer par le mécanisme d'highlighter et de predicate.

    Ton predicate va te permettre de déterminer les conditions d'application du highlighter en lui même.

    Dans ton cas voici le predicate:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private class MyHighlightPredicate implements HighlightPredicate {
     
            public boolean isHighlighted(Component renderer, ComponentAdapter adapter)  {
                int rowIndex = adapter.row;
                TreePath path = table.getPathForRow(rowIndex);
                DefaultMutableTreeTableNode row = (DefaultMutableTreeTableNode) path.getLastPathComponent();
                return node.getUserObject() instanceof BOQWoodwork;
            } 
        }
    Puis on utilise un ColorHighlighter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ColorHighlighter hl = new ColorHighlighter(Color.yellow,Color.blue, new MyHighlightPredicate());
    myJXTreeTable.addHighlighter(hl);
    Et voilà

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Par défaut
    Ah ok ! Je comprend mieux maintenant, c'est exactement ce qu'il me fallait.
    En espérant que ca puisse servir à un autre, pour moi c'est résolu

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

Discussions similaires

  1. [WPF] DatePicker Changer le background color
    Par BenoitM dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 26/10/2012, 13h01
  2. Changer dynamiquement background color
    Par mcfly37 dans le forum Tapestry
    Réponses: 7
    Dernier message: 30/07/2010, 17h13
  3. Réponses: 10
    Dernier message: 30/07/2008, 15h08
  4. [API win32] Changer le background des menuPopup
    Par dalyusmo dans le forum MFC
    Réponses: 6
    Dernier message: 05/10/2005, 13h35
  5. [JButton] Background non coloré avec LnF Windows
    Par leminipouce dans le forum Composants
    Réponses: 7
    Dernier message: 03/10/2005, 13h48

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