Bonjour,
Je dois avouer que je capitule pourtant que ce soit avec un tree ou une table c'est ultra simple ce que je cherche à faire ou alors je suis trop crevé pour ne pas avoir vu l'évidence.
Ma tree table comporte des objets qui ont tous une méthode getColor() qui est en fait le background color de la ligne. Ainsi chaque ligne peuvent avoir des couleurs différentes.
Voilà, j'ai honte ... c'est ce que je n'arrive pas à faire. mon Table cell renderer resemble à ça :
résultat obtenu :
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 DefaultTableCellRenderer tableCellRenderer = new DefaultTableCellRenderer() { /** * Overrides getTableCellRendererComponent. * * {@inheritDoc} * * @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, * java.lang.Object, boolean, boolean, int, int) */ @Override public Component getTableCellRendererComponent(JTable pTable, Object pValue, boolean pIsSelected, boolean pHasFocus, int pRow, int pColumn) { Component lComponent = super.getTableCellRendererComponent(pTable, pValue, pIsSelected, pHasFocus, pRow, pColumn); TreePath path = alertTreeTable.getPathForRow(pRow); if (path.getLastPathComponent() instanceof AlertTreeTableNode) { UIAlert alert = ((AlertTreeTableNode) path.getLastPathComponent()).getAlert(); lComponent.setBackground(alert.getAlertColor().getColor()); } return lComponent; } }; for (int i = 0; i < alertTreeTable.getColumnCount(); ++i) { alertTreeTable.getColumn(i).setCellRenderer(tableCellRenderer); }
- si je sélectionne la ligne j'ai toujours la bonne couleur.
- Si je ne la sélectionne pas, j'ai une des couleur.
Dans tous les cas, la première colonne n'est jamais coloriée.
Donc et d'un je n'affiche la bonne couleur que si la ligne est sélectionnée (alors que pour ce cas là je voudrais ajouter une couleur de sélection bien particulière) et de deux la première colonne n'affiche JAMAIS aucune couleur.
pour info voilà la configuration de ma table (dans le cas d'un effet de bord):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 alertTreeTable.setAutoCreateColumnsFromModel(false); (sans ça le renderer de mon header est foutu en l air à chaque update de ma table) alertTreeTable.setColumnControlVisible(false); alertTreeTable.setHorizontalScrollEnabled(true); alertTreeTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); alertTreeTable.setEditable(false); alertTreeTable.setLeafIcon(null); alertTreeTable.setOpenIcon(null); alertTreeTable.setClosedIcon(null); alertTreeTable.setCollapsedIcon(TREE_COLAPSED_ICON); alertTreeTable.setExpandedIcon(TREE_EXPANDED_ICON);
J'ai essayé de le faire en 2x. Appliquer un tablecellrenderer et un TreeCellRenderer (au passage j'ai maté les sources pour essayer de comprendre ce que ça fait). Je préfère pas raconter le massacre au niveau du rendu et encore plus au niveau du code (à base de copier coller du TreeCellRenderer utilisé dans le code de la JXTreeTable)
Que ce soit dans une table classique ou dans un tree classique, ce que je cherche à faire est fait en - de 30 sec. et là j'y ai passé l'après midi ... s'il vous plait dites moi que je suis une grosse loutre et qu'il y a un truc évident à faire que je n'ai pas vu.
Partager