JavaFX8 Style不能立即更新

时间:2015-03-27 11:31:32

标签: css javafx java-8

我在设置布尔值时尝试更改表格行的颜色。

所以我有这段代码:

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,有时我必须在它改变之前点击一下,我怎么能手动触发呢?

1 个答案:

答案 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(...),表格就会更改。