setCellValueFactory 用于 javaFX 中的动态列数
setCellValueFactory for dynamic number of column in javaFX
我制作了一个日志记录 GUI,我的主视图是一个 TableView,其中的列名称从配置文件中加载。
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);
}
这按预期工作。 (我在我的应用程序中看到更正列 headers)。
然后我想为每一列添加一个 CellValueFactory:
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 函数中定义:
Caused by: java.lang.Error: Unresolved compilation problem:
Local variable i defined in an enclosing scope must be final or effectively final
有什么想法吗?这可能是个糟糕的方法,我是 Java/JavaFX 的新手。
非常感谢!
只需将 i 复制到有效最终变量:
for (int i = 0; i < colList.size(); i++)
{
int index = i ;
colList.get(i).setCellValueFactory(cellData -> cellData.getValue().getTokens()[index]);
// ...
}
我制作了一个日志记录 GUI,我的主视图是一个 TableView,其中的列名称从配置文件中加载。
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);
}
这按预期工作。 (我在我的应用程序中看到更正列 headers)。 然后我想为每一列添加一个 CellValueFactory:
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 函数中定义:
Caused by: java.lang.Error: Unresolved compilation problem:
Local variable i defined in an enclosing scope must be final or effectively final
有什么想法吗?这可能是个糟糕的方法,我是 Java/JavaFX 的新手。
非常感谢!
只需将 i 复制到有效最终变量:
for (int i = 0; i < colList.size(); i++)
{
int index = i ;
colList.get(i).setCellValueFactory(cellData -> cellData.getValue().getTokens()[index]);
// ...
}