我在设置布尔值时尝试更改表格行的颜色。
所以我有这段代码:
boolean searchmode = false;
....
columns.forEach(c -> c.setCellFactory(column -> {
return new TableCell<ShowableInWarenkorb, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : item);
if (searchmode) {
getStyleClass().add("searchmode");
} else{
getStyleClass().remove("searchmode");
}
}
};
}));
这个CSS:
.searchmode {
-fx-background-color: rgba(153,153,153,0.3);
})
然后我在更新表内容之前最终在我的代码中切换searchmode。
但颜色并没有改变immediatley,有时我必须在它改变之前点击一下,我怎么能手动触发呢?
答案 0 :(得分:2)
从您的代码中,您似乎希望将此应用于表中的所有单元格。您可以在没有单元工厂的情况下执行此操作(尽管您可能需要一个用于其他目的)。
待办事项
PseudoClass searchmodePseudoClass = PseudoClass.getPseudoClass("searchmode");
然后当你更改searchmode的值时,执行
table.pseudoClassStateChanged(searchmode);
在你的CSS中,做
.table-view:searchmode .table-cell {
-fx-background-color: rgba(153,153,153,0.3);
}
如果你想&#34;自动化&#34;更新伪类状态,使用布尔属性并添加一个监听器:
private final BooleanProperty searchmode = new SimpleBooleanProperty(false);
public final boolean isSearchmode() {
return searchmodeProperty().get();
}
public final void setSearchmode(boolean searchmode) {
searchmodeProperty().set(searchmode);
}
public BooleanProperty searchmodeProperty() {
return searchmode ;
}
然后,如果你添加了监听器
searchmode.addListener((obs, wasSearchmode, isNowSearchmode) ->
table.pseudoClassStateChanged(searchmodePseudoClass, isNowSearchmode));
所有内容都会自动连线,因此只要您拨打setSearchmode(...)
,表格就会更改。