【问题标题】:JavaFX setCellFactory doesn't set my itemJavaFX setCellFactory 没有设置我的项目
【发布时间】:2018-10-06 10:53:32
【问题描述】:

我的 cellFactory 有问题。 我希望如果在 FX TableView 中将 Date 设置为我的对象,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"));

任何想法我做错了什么?

【问题讨论】:

  • “据我了解,这应该发生在super() 电话中。”。否:TableCell.updateItem(...) 没有设置任何文本。

标签: java user-interface javafx javafx-8


【解决方案1】:

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

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);
}

【讨论】:

  • 感谢您的快速回复。我以为“setItem(item);”这行在 super 方法中将设置项目并且足以满足我的需要。我没有意识到我还必须使用 setText。非常感谢!
猜你喜欢
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
相关资源
最近更新 更多