JTable apparence graphique d'une ligne sélectionnée
Bonjour
Je ne suis pas vraiment un débutant en java mais là j'y perd mon latin.
Donc j'ai une JTable avec un modèle et un renderer spécifique. Toutes les cellules de ma table sont des String. Les cellules ne sont pas éditables.
Tout d'abord ce que je veux : lorsque je clique sur une cellule du tableau, toutes la ligne prend une couleur fond qui la distingue des autres lignes.
Si je ne mets pas la méthode :
Code:
1 2 3 4 5
|
public Class<?> getColumnClass(int col)
{
return String.class;
} |
Cela fonctionne mais par contre le tableau n'utilise pas mon renderer spécifique.
Si je mets la méthode ci-dessus, mon renderer fonctionne. Par contre quand je clique sur une cellule, le renderer utilisé pour la cellule cliquée n'est pas mon renderer personnel mais semble-t'il un autre renderer par défaut propre aux JTable.
Quelqu'un a une idée ?
Au cas où, bien que je pense que cela n'apporte rien je vous mets mon renderer personnel.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
public class RendererActe extends DefaultTableCellRenderer
{
@Override
public Component getTableCellRendererComponent(JTable table, Object val, boolean isSelected, boolean hasFocus, int lig, int col)
{
Component composant = super.getTableCellRendererComponent(table,val,isSelected,hasFocus,lig,col);
TableauActes tableau = (TableauActes) table;
DonneeActe acte = (DonneeActe) tableau.getDonneeLigne(lig);
if (acte.isValide()) composant.setBackground(Color.LIGHT_GRAY);
else composant.setBackground(Color.WHITE);
if (acte.getSV().isEmpty() || acte.getCote_reduite().isEmpty()) composant.setForeground(Color.BLACK);
else composant.setForeground(Color.BLUE);
return composant;
}
} |
Bien sûr j'ai appliqué ce renderer à mon tableau
Code:
1 2 3 4 5 6 7
|
public TableauActes(ModeleActes m)
{
super(m);
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
setDefaultRenderer(String.class,new RendererActe());
} |
Je précise en outre que j'ai utilisé
Code:
1 2 3 4
|
//sélection par ligne seulement
tableau.setRowSelectionAllowed(true);
tableau.setColumnSelectionAllowed(false); |
Il y a beaucoup plus simple pour ce problème de ligne sélectionnée
Je reprends ce problème de janvier ayant été confronté au même problème
En fait il y a une solution déjà implémentée dans Java : isRowSelected(int lig)
Donc en réécrivant le renderer on n'a plus besoin d'une variable supplémentaire selectionnee
Code:
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
|
public class RendererActe extends DefaultTableCellRenderer
{
@Override
public Component getTableCellRendererComponent(JTable table, Object val, boolean isSelected, boolean hasFocus, int lig, int col)
{
Component composant = super.getTableCellRendererComponent(table,val,isSelected,hasFocus,lig,col);
TableauActes tableau = (TableauActes) table;
DonneeActe acte = (DonneeActe) tableau.getDonneeLigne(lig);
if (tableau.isRowSelected(lig))
{
composant.setBackground(Color.LIGHT_GRAY);
}
else
{
if (acte.isValide()) composant.setBackground(Color.YELLOW);
else composant.setBackground(Color.WHITE);
}
if (acte.getSV().isEmpty() || acte.getCote_reduite().isEmpty()) composant.setForeground(Color.BLACK);
else composant.setForeground(Color.BLUE);
return composant;
}
} |
Et voilà.