Eh bien, vous pourriez réaliser avec soo bien des égards, et les tant de manières a à voir avec la façon dont vous le mettre en œuvre dans le TableCell
, mais il sera dépend principalement de la DataHolder
Object
que vous utilisez pour aider à la virtualization
Pour ce faire, vous devrez créer votre TableCell
updateItem(Object,boolean)
pour implémenter la mise à jour de la cellule par rapport aux styles, etc, et cela devrait être en relation avec votre updateSelected(boolean)
même si l'un appelle l'autre, ou laisse les deux et utiliser updateIndex()
donc quelque chose comme ça pour votre DataHolder
class
private class CellDataHolder {
public CellDataHolder (String a){
value = a;
}
String value = "empty"; //this being the text to show
boolean badMatch = false; //this being the flag to index whether the
//text matches your preference
}
maintenant dans votre cellule, dans une de ces méthodes mentionnées vous ajoutez un chèque de votre article par exemple
@Override
public void updateItem(CellDataHolder item, boolean empty) {
super.updateItem(item, empty);
if(empty){return;}
setText(item.value);//set your text
if(item.badMatch){//check if the text fits.
setStyle(wrongFormatStyle);//this is where you set your bad style
}else{
setStyle(normalyStyle);//the style you want
}
}
puis dans votre StringConverter
vous utiliser pour vérifier si votre texte est valide, le raison pour laquelle je pense que vous devriez utiliser le StringConverter est qu'il peut réduire les appels multiples update...()
reçoit, ces méthodes sont appelées soo plusieurs fois n'est pas cool de mettre beaucoup de travail là-bas, votre cellule peut sembler lente, alors mieux vaut le mettre ici, par exemple
setConverter(new StringConverter<CellDataHolder>() {
@Override
public String toString(CellDataHolder arg0) {
arg0.badMatch =
arg0.value.matches(".*[a-zA-Z]+.*");//here you add your algorithm
return arg0.value;
}
@Override
public CellDataHolder fromString(String arg0) {
getItem().value = arg0;
return getItem();
}
});
Vous pouvez également filtrer comment filtre lorsque le contrôle doit être appelé, si une actualisation est appelée ou si une modification explicite est en cours. par exemple
setConverter(new StringConverter<CellDataHolder>() {
@Override
public String toString(CellDataHolder arg0) {
if(isEditing()){ //whether it is an edit
arg0.badMatch =
arg0.value.matches(".*[a-zA-Z]+.*");//here you add your algorithm
}
return arg0.value;
}
@Override
public CellDataHolder fromString(String arg0) {
getItem().value = arg0;
return getItem();
}
});
Voici un full demo snippet
Démo Aperçu
Hope it helps.
Espoir? C'était très utile. Merci beaucoup. :RÉ –