我有一些TextFieldTableCell
,它們用於獲取Double
數據類型值。我想驗證它們。如果用戶給出錯誤的數據類型作爲輸入或保留該字段爲空,我要來標記TextFieldTableCell
作爲在JavaFX中爲TextFieldTableCell創建合法性檢查
背景顏色黃釉
文本樣式顏色紅
在成功驗證結束後,我再次要求TextFieldTableCell
正常。
我該如何做到這一點?
我有一些TextFieldTableCell
,它們用於獲取Double
數據類型值。我想驗證它們。如果用戶給出錯誤的數據類型作爲輸入或保留該字段爲空,我要來標記TextFieldTableCell
作爲在JavaFX中爲TextFieldTableCell創建合法性檢查
背景顏色黃釉
文本樣式顏色紅
在成功驗證結束後,我再次要求TextFieldTableCell
正常。
我該如何做到這一點?
那麼你可以用洙多種方式實現,而這麼多的方式與你實現它在TableCell
的方式做,但在DataHolder
Object
使用,以幫助該virtualization
要做到這一點,你將不得不創建你的TableCell
的updateItem(Object,boolean)
來實現對樣式等細胞的更新,它應該與你的updateSelected(boolean)
有關,即使你叫另一個,或者離開這兩個,使用updateIndex()
所以這樣的東西你的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
}
現在
在你的細胞,在這些方法中提到你添加一個檢查您的物品例如
@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
}
}
,然後在StringConverter
你會用它來檢查你的文字是否有效原因你我覺得你應該使用StringConverter是它可以減少多次調用update...()
接收,這些方法被稱爲soo多次不是很酷,在那裏做很長的工作,你的單元格可能看起來很慢,所以它更好地把它這裏,例如
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();
}
});
您還可以篩選何時篩選何時調用檢查,調用刷新還是正在進行顯式編輯。例如
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();
}
});
這裏是一個full demo snippet
希望它能幫助。
希望?這非常有幫助。非常感謝。 :d –