【问题标题】:JavaFX8 Style not immediately updatingJavaFX8 样式未立即更新
【发布时间】:2015-03-27 11:31:32
【问题描述】:

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

所以我有这个代码:

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
  • 将它添加到代码中......它表明我是否想要来自 searchmode 类的颜色
  • 如果 searchmode 为真,您似乎将表中所有列的文本更改为灰色,对吗?
  • 不是文本,列的背景变为灰色,不透明度为 0.2。表格的改变颜色应该指示模式
  • 是的,对不起,背景颜色。但同时所有单元格,对吗?

标签: css javafx java-8


【解决方案1】:

从您的代码看来,您希望将其应用于表格中的所有单元格。您完全可以在没有单元工厂的情况下执行此操作(尽管您可能需要一个用于其他目的)。

PseudoClass searchmodePseudoClass = PseudoClass.getPseudoClass("searchmode");

然后当你改变searchmode的值时,做

table.pseudoClassStateChanged(searchmode);

在你的CSS中,做

.table-view:searchmode .table-cell {
    -fx-background-color: rgba(153,153,153,0.3);
}

如果您想“自动”更新到伪类状态,请使用布尔属性并添加侦听器:

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(...) 时,表格都会发生变化。

【讨论】:

  • 哇,这太棒了,谢谢。完美解决了我的问题。什么是伪类?是css中的冒号表示的吗?
  • 是的,一个 CSS 伪类。有一些标准的(悬停等),但在 JavaFX 8 中,您可以定义自己的。这是CSS only description。还有Javadocs for the JavaFX implementation
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多