colStatus.setCellFactory(new Callback<TableColumn<Step, String>, TableCell<Step, String>>()
{
@Override
public TableCell<Step, String> call(TableColumn<Step, String> param) {
return new TableCell<Step, String>() {
@Override
protected void updateItem(String item, boolean empty) {
if (!empty) {
int currentIndex = indexProperty().getValue() < 0 ? 0 : indexProperty().getValue();
setText(param.getTableView().getItems().get(currentIndex).getStatus().name());
switch(param.getTableView().getItems().get(currentIndex).getStatus())
{
case Step.STATUS.Enabled:
setTextFill(Color.BLACK);
break;
case Step.STATUS.Disabled:
setTextFill(Color.GRAY);
break;
case Step.STATUS.Running:
setTextFill(Color.BLUEVIOLET);
break;
case Step.STATUS.Complete:
setTextFill(Color.LIME);
break;
case Step.STATUS.Error:
setTextFill(Color.RED);
setStyle("-fx-background-color: pink;");
break;
}
}
}
};
}
});
statusProperty()
类中定义了一个方法,并且使用Javafx 19或更高版本,您可以使用表行工厂。您的问题中没有足够的细节来提供完整的防弹代码,但这并未进行测试,但是以下内容应该给您一个想法:
Step
然后使用带有的外部样式表
table.setRowFactory( _ -> new TableRow() {
private final List<String> statusClasses = List.of(
"enabled",
"disabled",
"running",
"complete",
"error"
);
{
itemProperty().flatMap(Step::statusProperty).subscribe(status -> {
for (String s : statusClasses) {
PsuedoClass pc = PseudoClass.getPseudoClass(cssStatusClass);
pseudoClassStateChanged(pc, s.equals(status.toLowerCase());
}
});
}
});