Javafx: TableView changement de ligne de couleur en fonction de la valeur de la colonne
J'ai le morceau de code suivant pour mettre à jour la couleur d'une cellule de colonne et de ligne:
calltypel.setCellFactory(column -> {
return new TableCell<CallLogs, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? "" : getItem().toString());
setGraphic(null);
TableRow currentRow = getTableRow();
//This doesn't work
if(item.equals("a")){
item.setTextFill(Color.RED);
currentRow.setTextFill(Color.PINK);
}
else{
item.setTextFill(Color.GREEN);
currentRow.setTextFill(Color.BLUE);
}
}
};
});
Le segment de code de " si " condition ne fonctionne pas. Je ne suis pas en mesure d'identifier correctement les références à des objets et aussi quel est le meilleur moyen pour ce faire.
Merci!
l'élément est une Chaîne de sorte que vous ne peut pas faire de l'élément.setTextFill(). Au lieu d'appeler cette.setTextFill(). Ce qui se passe si une cellule est "une" et un autre pas, quelle sera la couleur de la ligne?
Dans les deux conditions, les couleurs sont différentes. Mais la ligne de coloration ne fonctionne pas. En effet,
J'ai essayé
Dans les deux conditions, les couleurs sont différentes. Mais la ligne de coloration ne fonctionne pas. En effet,
item.equals
ne fonctionne pas.J'ai essayé
if (!isEmpty()) { this.setTextFill(Color.GREEN); if(item.equals("missed call")) this.setTextFill(Color.RED);}
et cela fonctionne, mais ce n'est pas la façon dont je souhaite écrire if
clause. Aussi, la façon de définir la couleur du texte pour l'ensemble de la ligne?OriginalL'auteur Dilpreet Kaur | 2015-06-17
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne!
Ceci ne fonctionnera pas lorsque l'utilisateur se cache la colonne (propriété de visibilité)
Cette réponse n'est pas utile puisque le type de la variable calltypel n'est pas spécifié.
devrait être un
TableColumn
objet.J'ai de la table avec 30 lignes, à seulement 7 visible. Valeurs de la colonne sont des Entiers, je ne veux que la couleur de la ligne avec le numéro 3. Mais quand j'ai faites défiler vers le haut et vers le bas (voir d'autres lignes que celles 7), en plus d'obtenir des lignes de couleur. Après quelque temps, je peut changer la couleur de toutes les lignes. @BlueWizard j'ai besoin de regarder pour ce que tu veux dire.
OriginalL'auteur Dilpreet Kaur
J'ai récemment fait un peu de recherche sur ce sujet. Avec le code suivant, vous pouvez changer la couleur des lignes d'une TableView basée sur une valeur de la colonne (je vais essayer de l'expliquer du mieux que je peux).
La première chose que nous avons à faire est de définir la TableView et les Colonnes de cette TableView:
L'étape suivante consiste à définir la Cellule de l'Usine de l'une des colonnes:
La logique du code: le updateItem() la méthode que nous remplacer, il est automatiquement appelée lors de l'élément sous-jacent changements.
Nous recevoir l'élément de données (une Chaîne de caractères dans ce cas) qui doit être rendue. Si l'élément est vide ou null (une cellule vide par exemple), nous n'avons pas appliquer n'importe quel style. Autrement, nous le format de l'élément, de définir le texte de la cellule, et aussi la couleur et l'arrière-plan, selon le Nom de la Personne.
Si vous souhaitez appliquer cette couleur de la cellule dans les autres colonnes de la table, nous devons utiliser la "Ligne d'Usine' au lieu de 'Usine Cellulaire, mais la logique du code est similaire:
C'est la meilleure façon que j'ai trouvée pour appliquer le changement de style dans toutes les cellules de la ligne. Si vous utilisez la méthode "getTableRow()" à l'intérieur de la Cellule de l'Usine, vous ne pouvez pas modifier les cellules des enfants.
NOTE 1: Si vous souhaitez modifier le style du texte, vous avez à travailler dans la cellule. Si vous essayez de faire les modifications directement sur la ligne, n'a aucun effet.
NOTE 2: Si vous utilisez un fichier CSS séparé, ne pas écrire quelque chose comme ceci:
Parce que si vous faites cela, tout le code Java n'a aucun effet.
The logic of the code: the updateItem() method that we overwrite, it's called automatically whenever the cell has to be rendered.
... Ce n'est pas vrai. Il est seulement appelé, comme son nom l'indique, lorsque l'élément sous-jacent changements, mais pas sur redimensionne par exemple.Merci pour les conseils. J'ai édité le texte.
Je suis l'aide de cette solution et ça fonctionne partiellement... Jusqu'à ce que je scroll, les lignes ne changent pas de couleur... une suggestion?
OriginalL'auteur Pablo Insua