如何在JavaFX </string>的表列中显示ArrayList <string>的每个元素

时间:2015-03-12 13:42:36

标签: javafx tableview tablecolumn

我有一个TableView<DataModelClass> tableTableColumn name中只有一个DataModelClassArrayList<String> nameList可以包含一个或多个名称。现在,当我运行我的代码时,名称列如下所示,[name1,name2,name3..]但我希望显示name1 name2 name3中的每一个一条单独的线。像这样,

-+-----------------+-                       -+-----------------+-
 |       Name      |   << I am Getting       |       Name      |
-+-----------------+-  Instade Like This >> -+-----------------+-      
 | [name1,name2,..]|                         |      name1      |   
-+-----------------+-                        |      name2      |
 |                 |                         |      name3      |
-+-----------------+-                       -+-----------------+-
                                             |                 |
                                            -+-----------------+-

我希望你能得到这个想法,但我怎样才能获得这个想法呢?

DataModelClass代码

public class DataModelClass {


    private ArrayList<String>nameList;

    private DataModelClass(ArrayList<String> nameList) {
        this.nameList = nameList;
    }

    public String getNameList() {
        return nameList;
    }

    public void setNameList(ArrayList<String> nameList) {
        this.nameList = nameList;
    }
}

TableVied代码

private TableView<DataModelClass> table = new TableView<DataModelClass>();
TableColumn colName = new TableColumn("Name");
        colName.setMinWidth(80);
        colName.setCellValueFactory(
                new PropertyValueFactory<GroupDataForTable, ArrayList<String> >("nameList"));

private ObservableList<DataModelClass> groupData = FXCollections.observableArrayList();
groupData.add(new DataModelClass(someNonEmptyArrayList));
table.setItems(groupData);

2 个答案:

答案 0 :(得分:0)

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

您可以使用流并将列表转换为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"));

答案 1 :(得分:0)

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

正如您的问题所示,每行只包含一个字符串,因此您应该

private TableView<String> table = new TableView<String>();

然后您只需通过

填写DataModelClass实例中的项目
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);