2016-08-03 72 views
0

我想在tableview的單元格的值爲空時更改tableview的單元格背景色。你可以幫幫我嗎?謝謝。 下面,我的源代碼的概述,但它不起作用。如何動態地改變tableview的單元格背景

public class Cell extends TextFieldTableCell<Itemtest, String>{ 

    public Cell(StringConverter<String> str){ 
     super(str); 
     this.itemProperty().addListener((obs, oldValue, newValue)->{ 
        if(newValue.isEmpty()) 
         this.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY))); 
     }); 
    } 

    @Override 
    public void updateItem(String item, boolean empty) { 
     super.updateItem(item, empty); 
     setText(empty ? null : getString()); 
     setGraphic(null);   
    } 

    private String getString(){ 
     return getItem() == null ? "" : getItem().toString(); 
    } 

} 
+0

您不需要爲此執行單元實施;你可以完全用CSS做 –

回答

0

與您的代碼,你的背景設置爲一種顏色,如果該項目成爲""。萬一項目應該改變,你永遠不會改變它。此外,項目是""意味着該單元格是不是空的

此外,您已覆蓋updateItem方法,該方法在項目更改或單元格變空時調用,應該用它來更新背景。

public class Cell extends TextFieldTableCell<Itemtest, String>{ 

    public Cell(StringConverter<String> str){ 
     super(str); 
    } 

    @Override 
    public void updateItem(String item, boolean empty) { 
     super.updateItem(item, empty); 
     setText(empty ? null : getString()); 
     setGraphic(null); 

     // is this really the check you want? 
     if (item != null && item.isEmpty()) { 
      this.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY))); 
     } else { 
      // change back to empty background 
      this.setBackground(Background.EMPTY); 
     } 
    } 

    private String getString(){ 
     return getItem() == null ? "" : getItem().toString(); 
    } 

} 
+0

當我點擊一個按鈕時(例如,確保值是數字或不是空的),我想對錶格單元格的值進行一些控制,並更改它們單元格的背景顏色if這些限制不受尊重。我怎樣才能做到這一點? – Rodja

+0

是否所有'TableCell'都檢查'updateItem'?從JavaFX 8更新60開始,您可以使用'TableView.refresh()'。 – fabian

+0

我在'controlButton.setOnAction(ev - > {..})裏面使用'TableView.refresh()';'它工作。非常感謝。 – Rodja

相關問題