[英]JavaFX: how to “repaint” a tableview
我很麻煩...我在列中有一個JavaFX Tableview,有些結果。 這些結果可以是“ OK”,“ N / A”和“ KO”,如果我有“ OK”,則將其塗成綠色,如果我有“ N / A”,則塗成黑色,如果我具有“ “我”將其塗成紅色(全部通過setStyle()方法)。 問題是,當我垂直滑動桌子時,文本的顏色隨機改變,並且我的紅色為“ OK”或綠色的為“ KO” ...我認為我應該使用類似repaint()的東西,但JavaFX並不是這樣,那我該怎么辦? 關於結果的代碼:
for (ResultMatch result : events) {
isMatch = (result.match().equals("OK") || result.match().equals("N/A"));
//Set the style
reader.getSampleController().xmlMatch.setCellFactory(new Callback<TableColumn<String, String>, TableCell<String, String>>() {
@Override
public TableCell call(TableColumn p) {
return new TableCell<String, String>() {
@Override
public void updateItem(final String item, final boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item);
setAlignment(Pos.CENTER);
switch (item) {
case "OK":
getStyleClass().remove("koItem");
getStyleClass().remove("naItem");
getStyleClass().add("okItem");
break;
case "N/A":
getStyleClass().remove("okItem");
getStyleClass().remove("koItem");
getStyleClass().add("naItem");
break;
case "KO":
getStyleClass().remove("okItem");
getStyleClass().remove("naItem");
getStyleClass().add("koItem");
break;
default:
setStyle("");
break;
}
} else {
setText(null);
}
}
};
}
});
isPass = isPass && isMatch;
reader.getSampleController().getViewXML().getItems().add(result);
}
在每種情況下,請先刪除所有樣式類,然后再添加所需的樣式類。 並且,如@brian在評論中所述,在默認情況下,請刪除所有樣式類。
原因是樣式類表示為List<String>
,因此它可以包含重復值。 remove(...)
方法僅刪除一個副本。 試試System.out.println(getStyleClass());
在updateItem(...)
方法中,您很可能會看到建立的類列表。
我會做:
final List<String> allStyleClasses = Arrays.asList("koItem", "naItem", "okItem");
// ...
@Override
public void updateItem(final String item, final boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item);
setAlignment(Pos.CENTER);
getStyleClass().removeAll(allStyleClasses);
switch (item) {
case "OK":
getStyleClass().add("okItem");
break;
case "N/A":
getStyleClass().add("naItem");
break;
case "KO":
getStyleClass().add("koItem");
break;
default:
break;
}
} else {
setText(null);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.