Nun könnte man mit soo vielen Möglichkeiten zu erreichen, und die so viele Möglichkeiten haben mit der Art und Weise zu tun Sie es in den TableCell
implementieren, aber es wird in erster Linie davon abhängig sein, die DataHolder
Object
Sie mit den virtualization
zu helfen, verwenden
Um dies zu tun müssen Sie Ihre TableCell
's updateItem(Object,boolean)
erstellen, um die Aktualisierung der Zelle in Bezug auf Stile usw. zu implementieren, und es sollte in Bezug auf Ihre updateSelected(boolean)
sein, obwohl man die andere anruft, oder lassen Sie die beiden und Verwenden Sie updateIndex()
so etwas wie das für Ihre 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
}
jetzt in der Zelle, in einem dieser genannten Methoden Sie einen Scheck für Ihren Artikel hinzufügen, zum Beispiel
@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
}
}
und dann in Ihrem StringConverter
Sie verwenden, wird zu prüfen, ob Ihr Text gültig ist Grund Sie, ich fühle, dass Sie den StringConverter verwenden sollten ist, dass es die multiple Anrufe update...()
empfangen kann, diese Methoden ruft soo viele Male ist nicht cool, um eine lange viel Arbeit dort zu setzen, könnte Ihre Zelle langsam aussehen, so dass es besser Sie es setzen hier zum Beispiel
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();
}
});
Sie können auch Filter filtern, wenn die Prüfung aufgerufen werden soll, ob eine Aktualisierung aufgerufen oder eine explizite Änderung vorgenommen wird. zum Beispiel
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();
}
});
Hier ist ein full demo snippet
Demo Vorschau
Hoffe, es hilft.
Hoffnung? Es war sehr hilfreich. Ich danke dir sehr. : D –