JavaFX TableView как добавить элементы в столбец?
Я работаю над GUI, в котором пользователь может просматривать текстовые файлы из SYSTEM, а затем, когда пользователь нажимает кнопку "Start", программа читает текстовый файл/ы, создает списки из их данных и должна добавить их в TableView
. Я застрял на вставке данных из списков в таблицу. Я создал названия колонок по именам файлов и добавил их в таблицу:
tblConfigurationSystemColumns.add("Parameter Name");
tblSystemColumn.stream().map((str) -> str.split("PCM")).forEachOrdered((a) -> {
tblConfigurationSystemColumns.add(a[0].trim());
});
for (int i = 0; i < tblConfigurationSystemColumns.size(); i++) {
TableColumn col = new TableColumn(tblConfigurationSystemColumns.get(i));
tableConfigurationSystem.getColumns().addAll(col);
}
Имена столбцов берутся из списка tblConfigurationSystemColumns
. Этот список может изменяться при каждом использовании GUI по количеству файлов, которые вы просматриваете из системы. (пока что будем считать, что у нас есть 2 строки: "column1", "column2"
)
Мне нужно добавить элементы в column1
из списка SysParameter
, и в column2
из списка SysValues
.
Как я могу добавить значения из каждого списка в каждый столбец по строкам? Если вам нужен еще какой-либо код, пожалуйста, скажите мне (просто дайте знать, что единственный код, который у меня есть, это создание списка из файлов).
Вот что я получил после построения колонки. После этого мне нужно получить "Параметр" и "Значение" для каждой колонки (как вы можете видеть). Я сделал список, который получает "Параметр" из текстового файла, и другой список, который получает "Значение" из текстового файла.
Как я могу поместить каждый список в свой столбец? Вот код, который создает эти списки:
boolean inCESystem = false;
for (final String line : list) {
if (line.contains("CE-") && !(line.contains("CE-system-equipment-pm") || line.contains("inbound") || line.contains("outbound"))) {
inCESystem = true;
}
else if (line.trim().isEmpty()) {
inCESystem = false;
}
else if (inCESystem) {
CE_System.add(line);
}
}
boolean inCESystemInbound = false;
for (final String line : list) {
if (line.contains("CE-") && (line.contains("inbound")) ) {
inCESystemInbound = true;
}
else if (line.trim().isEmpty()) {
inCESystemInbound = false;
}
else if (inCESystemInbound) {
CE_System.add("inbound_loadlock - "+line.trim());
}
}
boolean inCESystemOutbound = false;
for (final String line : list) {
if (line.contains("CE-") && (line.contains("outbound")) ) {
inCESystemOutbound = true;
}
else if (line.trim().isEmpty()) {
inCESystemOutbound = false;
}
else if (inCESystemOutbound) {
CE_System.add("outbound_loadlock - "+line.trim());
}
}
/*
* Check the CE list to split each object per parameter and value to different lists
*/
CE_System.stream().map((str) -> str.split(",")).map((a) -> {
CE_SystemParameter.add(a[0].trim()); //Parameters
return a;
}).forEachOrdered((a) -> {
if(a.length > 1) {
CE_System_Value.add(a[1].trim()); //Values
} else {
CE_System_Value.add(""); //add blank if parameter doesn't have value
}
});
Примечание 2: Пример текстового файла
CE-system:
No features to set for this item...
CE-system-componentmanager:
Bootstrap Parallelism ,Parallel Bootstrapping
CE-system-components:
No features to set for this item...
CE-system-components-accessmanager:
Access control enable ,disabled
Access policy prototyping ,enabled
Access user group ,enabled
Implicit roles access policy ,disabled
World access policy ,disabled
CE-system-components-eqlog:
EquipmentLog Enable ,false
- Строка, содержащая "CE-", это просто название, чтобы знать, что она должна быть в "Конфигурации".
- Каждая строка внутри - это "параметр" и значение (после запятой).
РЕДАКТ 3: Таблица должна выглядеть так (Этот пример взят из моего кода на Java SWT)
Спасибо большое ребята.
Данные для
TableView
хранятся вObservableList
свойстваitems
. ВидTableView
предназначен для хранения списка POJO, содержащих различные свойства. Каждое из свойств будет соответствоватьTableColumn
, который получает значение этих свойств с помощьюCallback
.Поскольку вы просматриваете текстовые файлы, допустим, вы определите POJO следующим образом:
Из этого вы хотите получить
TableView
изTextFile
, который имеетTableColumn
дляname
иTableColumn
дляize
. Чтобы указатьTableColumn
, как получить нужное значение, вы устанавливаетеcellValueFactory
с соответствующимCallback
. ЭтотCallback
принимаетTableColumn.CellDataFeatures
и возвращаетObservableValue
. ЕслиObservableValue
изменится,TableColumn
обновит элемент соответствующейTableCell
.Обратите внимание, что каждый
TextFile
вfiles
является строкой вTableView
.Полагаю, вы ищете что-то подобное:
Посмотрите здесь подробное описание: https://docs.oracle.com/javafx/2/ui_controls/table-view.htm
Выберите тип товара соответствующим образом. В вашем описании указаны следующие свойства:
Поэтому подходящим вариантом структуры данных будет
List
. Каждый список содержит по одному элементу для каждого столбца.