如何在JavaFX的Tablecolumn中显示ArrayList的每个元素

如何在JavaFX的Tablecolumn中显示ArrayList的每个元素,javafx,tableview,tablecolumn,Javafx,Tableview,Tablecolumn,我有一个TableView表,它在我的DataModelClass中只有一个TableColumn名称。有一个ArrayList名称列表,可以包含一个或多个名称。现在,当我运行代码时,Name列看起来像这样,[name1,name2,name3..],但我想在单独的一行中显示name1,name2,name3中的每一个。像这样, -+-----------------+- -+-----------------+- | Name

我有一个TableView表,它在我的DataModelClass中只有一个TableColumn名称。有一个ArrayList名称列表,可以包含一个或多个名称。现在,当我运行代码时,Name列看起来像这样,[name1,name2,name3..],但我想在单独的一行中显示name1,name2,name3中的每一个。像这样,

-+-----------------+-                       -+-----------------+-
 |       Name      |   << I am Getting       |       Name      |
-+-----------------+-  Instade Like This >> -+-----------------+-      
 | [name1,name2,..]|                         |      name1      |   
-+-----------------+-                        |      name2      |
 |                 |                         |      name3      |
-+-----------------+-                       -+-----------------+-
                                             |                 |
                                            -+-----------------+-
我希望你能明白,但我怎样才能做到呢

DataModelClass的代码

表格编码

虽然你的设计有点奇怪,但是

您可以使用streams并将列表转换为String对象,然后从getter方法返回它

nameList.stream().collect(Collectors.joining("\n"));
这将为您提供换行符中的每个元素,但它是一个完整的字符串

public class DataModelClass {

    private List<String> nameList;

    ...

    public String getNameList() {
        return nameList.stream().collect(Collectors.joining("\n"));
    }

    ...
}
在您使用TableView的班级中

TableColumn<DataModelClass, String> name = new TableColumn<DataModelClass, String>("Name");
name.setCellValueFactory(new PropertyValueFactory<DataModelClass, String>("nameList"));

为TableView指定的类型是由表的每一行表示的对象的类型。由于您只有一个DataModelClass对象,因此这不是表视图使用的正确类型

就您的问题而言,每一行只包含一个字符串,因此您应该

private TableView<String> table = new TableView<String>();
现在,您只需确保列显示正确的值:

TableColumn colName = new TableColumn("Name");
colName.setMinWidth(80);
colName.setCellValueFactory(cellData -> new ReadOnlyStringWrapper(cellData.getValue()));
table.getColumns().add(colName);

在本例中,为TableView DataModelClass指定的类型应该是表中每一行表示的对象的类型。你有一个完整的DataModelClass对象列表,还是只有一个?@James_D对于我问的问题,现在请忽略nameX。我已经相应地编辑了我的问题。谢谢。你能回答我在评论中提出的问题吗?@James\u D我只有一个DataModelClass对象,它是groupData。在这个对象中,我有一个ArrayList名称列表,该列表包含3个字符串,分别为name1 name2和name3。这将在单个表格单元格中显示所有值。在这种情况下,为什么要用桌子呢?@ItachiUchiha非常感谢你。它奏效了:@James_D我用这种方式表示了这个问题,这样读者就不会在阅读我的代码时遇到困难。事实上,我有一个由7列和许多行组成的TableView,除了上面提到的问题之外,它完全符合我的目的。@James_D虽然你是对的,但这是OP在问题中提出的问题。我不知道他为什么想要它@Desh_Er_Bojha如果您的评论中没有提到ObservableLista,那么James_D是对的,您必须考虑TableView以外的其他控件。@Desh_Er_Bojha但是如果您这样设置,您的表只有一行,而不是您所说的多行。同样,我也不确定是否可以更清楚地说明这一点,如果您有一个TableView,那么DataModelClass的每个实例只有一行。因此,如果您只有一个DataModelClass实例,那么无论该行如何显示,您的表都只有一行。
private TableView<String> table = new TableView<String>();
DataModelClass data = new DataModelClass(someNonEmptyArrayList);
table.getItems().setAll(data.getNameList());
TableColumn colName = new TableColumn("Name");
colName.setMinWidth(80);
colName.setCellValueFactory(cellData -> new ReadOnlyStringWrapper(cellData.getValue()));
table.getColumns().add(colName);