JavaFX8 样式没有立即更新
JavaFX8 Style not immediately updating
我试图在设置布尔值时更改 table 行的颜色。
所以我有这个代码:
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);
})
然后我在更新 table 内容之前最终在我的代码中切换了搜索模式。
但是颜色并没有立即改变,有时我必须点击一下才能改变,如何手动触发?
从您的代码来看,您似乎想将此应用于 table 中的所有单元格。你完全可以在没有细胞工厂的情况下做到这一点(尽管你可能需要一个用于其他目的)。
做
PseudoClass searchmodePseudoClass = PseudoClass.getPseudoClass("searchmode");
然后当您更改搜索模式的值时,执行
table.pseudoClassStateChanged(searchmode);
在你的css中,做
.table-view:searchmode .table-cell {
-fx-background-color: rgba(153,153,153,0.3);
}
如果你想"automate"更新到伪类状态,使用布尔值属性并添加一个监听器:
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(...)
,table 就会更改。
我试图在设置布尔值时更改 table 行的颜色。
所以我有这个代码:
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);
})
然后我在更新 table 内容之前最终在我的代码中切换了搜索模式。
但是颜色并没有立即改变,有时我必须点击一下才能改变,如何手动触发?
从您的代码来看,您似乎想将此应用于 table 中的所有单元格。你完全可以在没有细胞工厂的情况下做到这一点(尽管你可能需要一个用于其他目的)。
做
PseudoClass searchmodePseudoClass = PseudoClass.getPseudoClass("searchmode");
然后当您更改搜索模式的值时,执行
table.pseudoClassStateChanged(searchmode);
在你的css中,做
.table-view:searchmode .table-cell {
-fx-background-color: rgba(153,153,153,0.3);
}
如果你想"automate"更新到伪类状态,使用布尔值属性并添加一个监听器:
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(...)
,table 就会更改。