JTable ligne de couleur en fonction de la Valeur dans le modèle?
J'ai ce code dans mon modèle de Table:
public class DocumentProjectTableModel extends AbstractTableModel{
private List<MyDocument> myDocuments;
public String getValueAt(int row, int column) {
String toReturn = null;
MyDocument myDocument = myDocuments.get(row);
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
switch (column) {
case 0:
if(myDocument.getProject().getRegDate()!=null) toReturn = format.format(myDocument.getProject().getRegDate());
break;
case 1:
toReturn = myDocument.getProject().getRegNum();
break;
case 2:
toReturn = myDocument.getProject().getDescription();
break;
case 3:
toReturn = myDocument.getProject().getShortName();
break;
case 4:
toReturn = myDocument.getProject().getSecondName()+myDocument.getProject().getFirstName()+myDocument.getProject().getMiddleName();
break;
}
return toReturn;
}
// some other stuff is not shown
Je veux changer la couleur d'arrière-plan de chaque ligne, par exemple si myDocument.getIsRegistered() == true
, je veux cette ligne pour avoir fond jaune, si myDocument.getIsValid == false
ligne est bleu et ainsi de suite.
J'ai trouvé des exemples que changer la couleur des lignes en fonction de valeurs dans la JTable. Mais getIsValid et getIsRegistered() ne sont pas affichés, ils n'existent que dans le modèle. Des conseils ou de l'exemple serait très utile. merci à l'avance.
mise à jour. mon TableCellRenderer:
public class MyTableCellRenderer extends JLabel implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
String actualValue = (String) value;
//Set the colors as per the value in the cell...
if(actualValue.equals("lifesucks") ){
setBackground(Color.YELLOW);
}
return this;
}
}
à l'aide de moteur de rendu:
int vColIndex = 0;
TableColumn col = resultTable.getColumnModel().getColumn(vColIndex);
col.setCellRenderer(new MyTableCellRenderer());
resultTable.setModel(new DocumentProjectTableModel(docs));
tableau est indiqué comme d'habitude pas de couleur jaune. pourquoi?
update2.
resultTable=new JTable(new DocumentProjectTableModel(docs)){
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
// Color row based on a cell value
if (!isRowSelected(row)) {
c.setBackground(getBackground());
int modelRow = convertRowIndexToModel(row);
String type = (String) getModel().getValueAt(modelRow, 0);
c.setBackground(Color.GREEN);
}
return c;
}
};
table est vide:(
merci pour le tuyau. Mais lorsque j'appelle le moteur de rendu?
OriginalL'auteur bunnyjesse112 | 2011-11-15
Vous devez vous connecter pour publier un commentaire.
Puisque vous voulez à la couleur, une ligne entière, il est plus facile d'utiliser Ligne De Tableau De Rendu qu'elle ne l'est pour créer muuliple personnalisé convertisseurs.
Vous pouvez toujours accéder au modèle de la table. Il vous suffit d'utiliser:
utilisant le même moteur de rendu pour chaque ligne/colonne n'est PAS une bonne idée lorsque les colonnes contenir différents types de données. La table contient déjà le code pour déterminer le moteur de rendu à utiliser pour chaque colonne. Vous ne devriez pas dupliquer le code personnalisé dans un moteur de rendu.
bien que possible, c'est pas l'habitude d'installation
im en utilisant l'IDE pour faire glisser et déposer des composants. Ho puis-je remplacer Jtables méthodes? veuillez nu avec moi. je suis devenu programmeur par accident il y a un mois.
Je ne pas utiliser un IDE pour écrire le code donc je ne peux pas aider avec ceci. Je trouve qu'il est plus facile d'écrire mon propre code. De cette façon je peux passer du temps à apprendre Java au lieu d'apprendre comment utiliser l'IDE.
OriginalL'auteur camickr
Vous devez écrire votre propre rendu de cellule:
http://www.exampledepot.com/egs/javax.swing.table/CustRend.html
La valeur est en fait extraite du modèle, assurez-vous lier votre modèle à la JTable. La JTable récupérer la valeur pour vous donc, pas besoin de s'embêter à ce sujet.
Vous pouvez utiliser le convertRowIndexToModel() de la JTable pour obtenir le modèle de l'indice de la ligne. À l'aide de l'index de modèle vous pouvez interroger votre modèle de table de données associées et de décider sur la couleur.
veuillez regarder la mise à jour de question. merci
OriginalL'auteur Emmanuel Bourg
Vous avez besoin pour mettre en œuvre un rendu de cellule personnalisé. Ici, c'est un bon début:
EDIT: le Code mis à jour
Définir le moteur de rendu pour toutes les colonnes de cette façon:
J'espère que cette aide.
Juste édité ma réponse, veuillez jeter un oeil et laissez-moi savoir les résultats
mettra en évidence la mauvaise ligne si le tableau est trié
merci pour votre aide. quand dois-je appeler resultTable.setDefaultRenderer(MyColumnType.class, nouveau MyCellRenderer ());? après la définition de modèle pour le tableau?
OriginalL'auteur GETah