Définir la couleur de fond pour la ligne particulière de JTable au moment de l'exécution
Je travaille avec netbeans IDE7.4, je suis d'ajouter des lignes à la JTable
au moment de l'exécution, et maintenant je veux mettre en couleur d'arrière-plan pour une ligne particulière.
Maintenant, le problème est que lorsque la valeur de cette ligne est changé la couleur de cette ligne particulière est pas changé, et quand j'ai faites défiler vers le haut ou le bas de la table, les modifications sont appliquées.
Comment actualiser le tableau au moment de l'exécution? Comment définir la couleur d'arrière-plan de ligne particulière au moment de l'exécution?
C'est classe de rendu suis à l'aide de la coloration de ligne particulière:
public class MyCellRenderer extends javax.swing.table.DefaultTableCellRenderer
{
public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, java.lang.Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
final java.awt.Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Object val=table.getValueAt(row, 2);
String sval=val.toString();
sval=sval.replaceAll(":","");
int ival=Integer.parseInt(sval);
if(ival==0)
{
cellComponent.setForeground(Color.black);
cellComponent.setBackground(Color.red);
}
else
{
cellComponent.setBackground(Color.white);
cellComponent.setForeground(Color.black);
}
if (isSelected)
{
cellComponent.setForeground(table.getSelectionForeground()); cellComponent.setBackground(table.getSelectionBackground());
}
return cellComponent;
}
}
et je suis en assignant à la jtable comme ceci :
newViewTable.setDefaultRenderer(Object.class,new MyCellRenderer());
newViewTable est le nom de la JTable.
- Pouvez-vous fournir un exécutable exemple qui illustre votre problème?
- Pour mieux aider plus tôt, post un MCTaRE (Minime Complète Testé et Lisible par Exemple).
- Voir cette réponse
- Comment êtes-vous mise à jour de la table/modèle (donc il va changer la cellule rendu caractéristiques)?
- Pourquoi ne pas suivre les conseils que je lui ai offert et après un MCTaRE plutôt que de mal formaté (illisible) du code qui ne peut pas être exécuté, et est donc un exemple de rien?
Vous devez vous connecter pour publier un commentaire.
À un certain point, vous devez dire à la table que le contenu a changé d'une certaine façon.
Si vous utilisez un
TableModel
basé surAbstractTableModel
, vous pouvez utiliser lefireTableXxx
événements, par exemplefireTableCellUpdate(row, col)
. Il permettra d'informer leJTable
que le modèle a changé et le repeindre la table...Vous souhaitez peut-être envisager d'utiliser
fireTablesRowsUpdated
que ce sera la cause de laJTable
de mettre à jour l'ensemble de la ligne.Si vous utilisez
setValueAt
sur le modèle pour modifier la valeur, vous devrez appeler l'événement déclencheur...Mis à jour avec l'exécution de l'exemple
Ainsi, selon vous
MyCellRenderer
moteur de rendu, je n'ai que cet exemple, et il fonctionne très bien...La question est maintenant, que faites-vous différemment??
Utiliser une table de rendu de cellule. Voir Comment Utiliser des Tableaux: en Utilisant des Convertisseurs pour plus de détails.