2015-03-12 4 views
1

У меня есть TableView<DataModelClass> table, который имеет только один TableColumn name в моем DataModelClass есть ArrayList<String> nameList, который может содержать один или множественные имена. Теперь, когда я запускаю свой код, поле выглядит так: [name1,name2,name3..], но я хочу показать каждый из name1name2name3 в отдельной строке. Like This,Как показать каждый элемент ArrayList <String> в TableColumn в JavaFX

-+-----------------+-      -+-----------------+- 
|  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

Тип, который вы указываете для t он 'TableView' (' DataModelClass' в вашем случае) должен быть типом объекта, представленного * каждой строкой таблицы *. У вас есть целый список объектов DataModelClass или только один? –

+0

@James_D На вопрос, который я задал, прошу проигнорировать имяX в данный момент. Я отредактировал свой вопрос соответственно. Спасибо. –

+0

Можете ли вы ответить на вопрос, который я задал в комментарии? –

ответ

0

Хотя ваш дизайн является своего рода странно, еще ..

Вы можете использовать потоки и конвертировать ваш список объекту String и ret Извлеките его из метода геттера.

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")); 
+0

Это отобразит все значения в одной ячейке таблицы. Зачем использовать таблицу в этом случае? –

+0

@ItachiUchiha Большое спасибо.Он работал :) –

+0

@James_D Я представлял проблему таким образом, чтобы читатели не усердно читали мой код. На самом деле у меня есть «TableView», состоящий из 7 столбцов и нескольких строк, которые служат всем моим целям, кроме проблемы, о которой я упоминал выше. –

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);