2016-09-22 45 views
1

我有一些TextFieldTableCell,它們用於獲取Double數據類型值。我想驗證它們。如果用戶給出錯誤的數據類型作爲輸入或保留該字段爲空,我要來標記TextFieldTableCell作爲在JavaFX中爲TextFieldTableCell創建合法性檢查

背景顏色黃釉

文本樣式顏色紅

在成功驗證結束後,我再次要求TextFieldTableCell正常。

我該如何做到這一點?

回答

1

那麼你可以用洙多種方式實現,而這麼多的方式與你實現它在TableCell的方式做,但在DataHolderObject使用,以幫助該virtualization

這將是主要依賴

要做到這一點,你將不得不創建你的TableCellupdateItem(Object,boolean)來實現對樣式等細胞的更新,它應該與你的updateSelected(boolean)有關,即使你叫另一個,或者離開這兩個,使用updateIndex()所以這樣的東西你的DataHolderclass

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

演示預覽 enter image description here

希望它能幫助。

+1

希望?這非常有幫助。非常感謝。 :d –