如何在某些条件有效时更改tableView行颜色(javaFX)

时间:2017-06-29 08:19:38

标签: java javafx

我的申请包含:

  • 整数的arraylist。 此列表每隔几秒更新一次(添加数字,删除其他数据)

  • $('#myCalendar').fullCalendar('renderEvents', newEvents, true);

  • 数据包含多个字段和Tableview<Data>字段(整数)

  • 我希望能够绘制行,arraylist包含绿色的semNumId数字。

  • 可以更改arraylist(并且tableview数据将包含相同的数据)。因此可以在不更改表格数据的情况下打开和关闭绿色

我看这里:

JavaFx How to set row background color of specifics rows in TableView

但似乎没什么帮助。

我该如何实现?

注意:

semNumId

创建新的tableRow,我无法检查列表中是否有semNumId(因为在使用新操作创建时,默认值为0);

请添加示例代码

1 个答案:

答案 0 :(得分:1)

不确定我是否理解正确...

private final ObservableList<Integer> numbers = FXCollections.observableArrayList<>();
private final BooleanProperty numbersChanged = new SimpleBooleanProperty(false);

numbers.addListener(new ListChangeListener<Number> {
        @Override public void onChanged(Change<? extends Number> c) {
            numbersChanged.set(true);
        }
    });

tableView.setRowFactory(tv -> {
    TableRow<Data> row = new TableRow<>();
    BooleanBinding contains = Bindings.createBooleanBinding(() -> {
        if (numberChanged.get()) {
            if (!numbers.isEmpty() && row.getItem() != null && numbers.contains(row.getItem().getSemNumId())) {
                return true;
            }
            numberChanged.set(false);
        }

        return false;
    }, row.itemProperty(), numbersChanged);
    row.styleProperty().bind(Bindings.when(contains)
        .then("-fx-background-color: green;")
        .otherwise(""));
    return row;
    });

此实现假定您的Data对象在运行时不会更改其值(semNumId)(即不可变)。

相关问题