本文介绍了setCellValueFactory用于javaFX中的动态列数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个日志记录GUI,我的主视图是一个TableView,列名是从配置文件加载的。

I making a logging GUI and my main view is a TableView with columns name loaded from a config file.

String format="Type:Date:Message";
//OR
String format="A:Different:Number:Of:Column";

String[] tok = format.split(":");
logTable.getColumns().clear();
for (String s : tok) {
    TableColumn<LogLine, String> col = new TableColumn<LogLine, String>(s);
    logTable.getColumns().add(col);
}

这可以按预期工作。 (我在应用中看到了更正列标题)。
然后我想为每列添加一个CellValueFactory:

This works as expected. (I see the corrects column headers in my app).Then I want to add a CellValueFactory for each column:

    ObservableList<TableColumn<LogLine, ?>> colList =logTable.getColumns();

    for (int i = 0; i < colList.size(); i++)
    {
        colList.get(i).setCellValueFactory(cellData -> cellData.getValue().getTokens()[i]);
        // ...
    }

这不起作用因为java抱怨关于我没有在lambda函数中定义:

This is not working because java complains about i not defined in the lambda function:

Caused by: java.lang.Error: Unresolved compilation problem: 
    Local variable i defined in an enclosing scope must be final or effectively final

有任何想法吗?这可能是一个糟糕的方式,我是Java / JavaFX的新手。

Any ideas to do it ? It's maybe a bad way, i'm new to Java/JavaFX.

非常感谢!

推荐答案

只需将i复制到有效最终变量:

Just copy i to an effectively-final variable:

for (int i = 0; i < colList.size(); i++)
{
    int index = i ;
    colList.get(i).setCellValueFactory(cellData -> cellData.getValue().getTokens()[index]);
    // ...
}

这篇关于setCellValueFactory用于javaFX中的动态列数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 06:50