我有一个TableView<DataModelClass> table
,TableColumn name
中只有一个DataModelClass
,ArrayList<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);
答案 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);