有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我的申请包括:

  • 整数的数组列表。 此列表每隔几秒钟更新一次(添加号码,删除其他号码)

  • Tableview<Data>

  • 数据包含多个字段和semNumId字段(为整数)

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

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

我已经看过了:

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

但似乎没什么帮助

我如何实现这一点

请注意:

tableView.setRowFactory(tv -> {
    TableRow<Data> row = new TableRow<>();

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

请添加示例代码


共 (1) 个答案

  1. # 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)(即不可变)