fonction de sélection de ligne désactivée après l'aide d'un CellRenderer
-
27-09-2019 - |
Question
Je Cleary faire quelque chose de mal. Je pense serait le composant, mais voici le problème. Ceci est mon CellRenderer:
public class WildcardCellRenderer implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
JTextField c = new JTextField();
c.setBorder(javax.swing.BorderFactory.createEmptyBorder());
if(vColIndex == 2){
if((Integer)value == 0) c.setText("No") ;
else c.setText("Si");
} else c.setText(value.toString());
return c;
}
}
et voilà comment je mis en place la chose dans mon panneau:
this.table.setDefaultRenderer(Object.class, new WildcardCellRenderer() );
Le problème est que quand je mis en place les lignes ce renderer deviennent unselectable. Dois-je utiliser un autre composant pour afficher ce que je dois à l'affichage? Fondamentalement, je suis afficher une valeur 0/1 comme Non / Oui valeur.
La solution
Vous devez prendre la « isSelected » valeur en compte et mettre en place la couleur de fond en conséquence comme ceci:
if (isSelected) {
c.setBackground(table.getSelectionBackground());
c.setForeground(table.getSelectionForeground());
}
else {
c.setBackground(table.getBackground());
c.setForeground(table.getForeground());
}
J'ai pris cette d'un de mes ListCellRenderers mais je suppose que cela fonctionne même avec les TableCellRenderers.
Oh et BTW, vous pouvez réutiliser le champ de texte, il n'y a pas besoin de créer un nouveau champ de texte pour chaque cellule, de sorte que vous pouvez rendre le champ de texte un membre de votre classe et à l'intérieur de la méthode juste quelque chose de changement dans votre champ de texte comme le contenu / couleur et le retourner. De cette façon, vous ne finissent pas avec un million de cas de textfield sur une grande table.