JavaFX setCellFactory 未设置我的项目

标签 java user-interface javafx javafx-8

我的 cellFactory 有问题。 我希望如果将日期设置为 FX TableView 内的对象,则 updateItem 方法检查它是否是有效日期。如果不是,单元格应为红色。

    _availableCol.setCellFactory(column -> {
        return new TableCell<SimpleReservationUnit, LocalDate>() {
            @Override
            protected void updateItem(LocalDate date, boolean empty) {
                super.updateItem(date, empty);
                if (empty || date == null) {
                    setText(null);
                }else {
                    if (date.compareTo(_newDeparture.getValue()) < 0) {
                        setStyle("-fx-background-color: red");
                    }else{
                        setStyle("");
                    }
                }
            }
        };
    });

着色有效,但 LocalDate 从未设置为单元格。据我了解,这应该发生在 super() 调用中。 为此列实现了 CellValueFactory:

_availableCol.setCellValueFactory(new PropertyValueFactory<>("Available"));

知道我做错了什么吗?

最佳答案

您需要设置节点的文本。当您检测到它为空时,您会清除它,但当它不为空时,您不会设置它。如果单元格为空,您还会忘记清除样式。

if (empty || date == null) {
  setText(null);
  setStyle(""); // can this be null?           
} else {
  LocalDate departureDate = _newDeparture.getValue();
  String text = departureDate.toString();  // or format it for user locale
  setText(text);
  String style = date.isBefore(departureDate) ? "-fx-background-color: red" : "";
  setStyle(style);
}

关于JavaFX setCellFactory 未设置我的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50031138/

相关文章:

java - Google AppEngine 运行时中的模拟

java - clojure REPL - 从另一个进程连接

java - 在 JavaFX 中使用多个选择框来过滤 ListView

java - "this"关键字在实现接口(interface)(java)的类中意味着什么?怎么会作为接口(interface)发送呢?

java - 有关 Swing 组件的信息 (java)

java - 使用 JLabel 将背景图像添加到 JFrame

java - 如何使用按钮在文本字段中键入内容?

javafx - 将 ObservableList 绑定(bind)到其他两个 ObservableLists 的内容?

tabs - 像 Web 选项卡一样设置 Javafx 选项卡的样式

java - 使用客户端证书建立到 HTTPS 的连接