Как заполнить JavaFX TableView данными с помощью записи Java с данными из базы данных ⇐ JAVA
Как заполнить JavaFX TableView данными с помощью записи Java с данными из базы данных
Короткий вопрос. Как лучше всего заполнить представление таблицы Java FX данными из базы данных с помощью записи? (а не типичный класс объектов с геттерами и сеттерами)
Полный вопрос: У меня есть файл InventoryRecord.java, который я недавно создал, чтобы заменить традиционный объект под названием «Инвентаризация», который я использовал для заполнения табличного представления:
import java.util.List; публичная запись InventoryRecord( Строка сделать , Струнная модель , Строка официальнаямодель , Строка УПК , Категория List , Тип строки , Описание строки ,Продавец струн , Двойная стоимость , Двойная цена ) {} Я хотел бы использовать эту запись в качестве основы для заполнения моего TableView с использованием данных из базы данных (в данном случае это Neo4j, но это не важно)
До того, как у меня появилась эта запись InventoryRecord, я использовал типичный класс Inventory, который выглядел так (я, конечно, сократил его, чтобы вопрос был читабельным, предположим, что для каждого свойства Inventory есть геттеры/сеттеры.)< /п> публичный класс Inventory { частная строка make; частная строковая модель; частная строка официальнаямодель; частная категория List; частный строковый тип; описание частной строки; частный поставщик строк; частная двойная стоимость; частная двойная цена; частная строка UPC; //Метод фактического создания экземпляра объекта инвентаризации, использует методы установки для выполнения проверок для каждого поля public Inventory (производитель строки, модель строки, официальная модель строки, upc строки, категория списка , тип строки, описание строки, поставщик строки, двойная стоимость, двойная цена) { this.setMake(сделать); this.setModel(модель); this.setOfficialModel(официальнаямодель); this.setUpc(UPC); this.setCategory(категория); this.setType(тип); this.setDescription(описание); this.setVendor(поставщик); this.setCost(стоимость); this.setPrice(цена); } И вот как я заполнил таблицу результатами запроса
while (result.hasNext()) { //result.next() служит нашим итератором, который увеличивает нас по записям и через цикл while. Запись запись = result.next(); Строка make = Record.get("make").asString(); Строковая модель = Record.get("модель").asString(); StringofficialModel = Record.get("officialModel").asString(); String upc = Record.get("upc").asString(); Список категория = Record.get("категории").asList(Value::asString); Тип строки = Record.get("тип").asString(); String desc = Record.get("описание").asString(); Строка поставщика = Record.get("вендор").asString(); Двойная стоимость = Record.get("стоимость").isNull() ? null: Record.get("стоимость").asDouble(); Двойная цена = Record.get("цена").isNull() ? null: Record.get("цена").asDouble(); //при создании анонимных предметов Инвентаря вы можете отправить их в конструктор с любым именем InventoryTable.getItems().add(new Inventory(марка, модель, официальнаямодель,UPC, категория, тип, описание,поставщик, стоимость, цена)); } //Фабрика значений свойств должна использовать имена свойств в качестве строковых аргументов в конструкторе makeColumn.setCellValueFactory(new PropertyValueFactory("make")); modelColumn.setCellValueFactory(new PropertyValueFactory("модель")); OfficialModelColumn.setCellValueFactory(new PropertyValueFactory("officialModel")); CategoryColumn.setCellValueFactory(new PropertyValueFactory("категория")); upcColumn.setCellValueFactory(new PropertyValueFactory("upc")); typeColumn.setCellValueFactory(new PropertyValueFactory("тип")); descriptionColumn.setCellValueFactory(new PropertyValueFactory("описание")); vendorColumn.setCellValueFactory(new PropertyValueFactory("vendor")); CostColumn.setCellValueFactory(new PropertyValueFactory("стоимость")); PriceColumn.setCellValueFactory(new PropertyValueFactory("цена")); InventoryTable.setItems(inventoryTable.getItems()); Но как мне переключить все на InventoryRecord, а не только на объект Inventory, .setCellValueFactory и PropertyValueFactory не нравится то, что они видят. Я попробовал это (с некоторой помощью Google Bard), и, похоже, для строк не выдается никаких ошибок: makeColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().make())); Но для свойств/столбцов List и Double я попробовал это:
categoryColumn.setCellValueFactory(cellData -> new SimpleListProperty(cellData.getValue().category())); CostColumn.setCellValueFactory(cellData -> new SimpleDoubleProperty(cellData.getValue().cost())); и я получаю следующие ошибки: Несоответствие типов: невозможно преобразовать SimpleListProperty в ObservableValue Несоответствие типов: невозможно преобразовать SimpleDoubleProperty в ObservableValue
Любая помощь очень ценна!
Я попробовал это:
while (result.hasNext()) { //result.next() служит нашим итератором, который увеличивает нас по записям и через цикл while. Запись запись = result.next(); Строка make = Record.get("make").asString(); Строковая модель = Record.get("модель").asString(); StringofficialModel = Record.get("officialModel").asString(); String upc = Record.get("upc").asString(); Категория List = Record.get("categories").asList(Value::asString); Тип строки = Record.get("тип").asString(); String desc = Record.get("описание").asString(); Строка поставщика = Record.get("вендор").asString(); Двойная стоимость = Record.get("стоимость").isNull() ? null: Record.get("стоимость").asDouble(); Двойная цена = Record.get("цена").isNull() ? null: Record.get("цена").asDouble(); // Создаем InventoryRecord непосредственно из записи InventoryRecord InventoryRecord = new InventoryRecord(марка,модель,официальнаямодель,UPC,категория,тип,дескриптор,поставщик,стоимость,цена); // Добавляем InventoryRecord к элементам таблицы InventoryTable.getItems().add(inventoryRecord); } //Фабрика значений свойств должна использовать имена свойств в качестве строковых аргументов в конструкторе makeColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().make())); modelColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().model())); OfficialModelColumn.setCellValueFactory(cellData -> новый SimpleStringProperty(cellData.getValue().officialModel())); CategoryColumn.setCellValueFactory(cellData -> new SimpleListProperty(cellData.getValue().category())); upcColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().upc())); typeColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().type())); descriptionColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().description())); vendorColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().vendor())); CostColumn.setCellValueFactory(cellData -> new SimpleDoubleProperty(cellData.getValue().cost())); PriceColumn.setCellValueFactory(cellData -> new SimpleDoubleProperty(cellData.getValue().price())); InventoryTable.setItems(inventoryTable.getItems()); но получил следующие ошибки: Несоответствие типов: невозможно преобразовать SimpleListProperty в ObservableValue Несоответствие типов: невозможно преобразовать SimpleDoubleProperty в ObservableValue
Я ожидаю чего-то вроде этого (вот как это работает с моим классом Inventory, который я пытаюсь заменить на InventoryRecord): TableView с использованием класса инвентаря
Короткий вопрос. Как лучше всего заполнить представление таблицы Java FX данными из базы данных с помощью записи? (а не типичный класс объектов с геттерами и сеттерами)
Полный вопрос: У меня есть файл InventoryRecord.java, который я недавно создал, чтобы заменить традиционный объект под названием «Инвентаризация», который я использовал для заполнения табличного представления:
import java.util.List; публичная запись InventoryRecord( Строка сделать , Струнная модель , Строка официальнаямодель , Строка УПК , Категория List , Тип строки , Описание строки ,Продавец струн , Двойная стоимость , Двойная цена ) {} Я хотел бы использовать эту запись в качестве основы для заполнения моего TableView с использованием данных из базы данных (в данном случае это Neo4j, но это не важно)
До того, как у меня появилась эта запись InventoryRecord, я использовал типичный класс Inventory, который выглядел так (я, конечно, сократил его, чтобы вопрос был читабельным, предположим, что для каждого свойства Inventory есть геттеры/сеттеры.)< /п> публичный класс Inventory { частная строка make; частная строковая модель; частная строка официальнаямодель; частная категория List; частный строковый тип; описание частной строки; частный поставщик строк; частная двойная стоимость; частная двойная цена; частная строка UPC; //Метод фактического создания экземпляра объекта инвентаризации, использует методы установки для выполнения проверок для каждого поля public Inventory (производитель строки, модель строки, официальная модель строки, upc строки, категория списка , тип строки, описание строки, поставщик строки, двойная стоимость, двойная цена) { this.setMake(сделать); this.setModel(модель); this.setOfficialModel(официальнаямодель); this.setUpc(UPC); this.setCategory(категория); this.setType(тип); this.setDescription(описание); this.setVendor(поставщик); this.setCost(стоимость); this.setPrice(цена); } И вот как я заполнил таблицу результатами запроса
while (result.hasNext()) { //result.next() служит нашим итератором, который увеличивает нас по записям и через цикл while. Запись запись = result.next(); Строка make = Record.get("make").asString(); Строковая модель = Record.get("модель").asString(); StringofficialModel = Record.get("officialModel").asString(); String upc = Record.get("upc").asString(); Список категория = Record.get("категории").asList(Value::asString); Тип строки = Record.get("тип").asString(); String desc = Record.get("описание").asString(); Строка поставщика = Record.get("вендор").asString(); Двойная стоимость = Record.get("стоимость").isNull() ? null: Record.get("стоимость").asDouble(); Двойная цена = Record.get("цена").isNull() ? null: Record.get("цена").asDouble(); //при создании анонимных предметов Инвентаря вы можете отправить их в конструктор с любым именем InventoryTable.getItems().add(new Inventory(марка, модель, официальнаямодель,UPC, категория, тип, описание,поставщик, стоимость, цена)); } //Фабрика значений свойств должна использовать имена свойств в качестве строковых аргументов в конструкторе makeColumn.setCellValueFactory(new PropertyValueFactory("make")); modelColumn.setCellValueFactory(new PropertyValueFactory("модель")); OfficialModelColumn.setCellValueFactory(new PropertyValueFactory("officialModel")); CategoryColumn.setCellValueFactory(new PropertyValueFactory("категория")); upcColumn.setCellValueFactory(new PropertyValueFactory("upc")); typeColumn.setCellValueFactory(new PropertyValueFactory("тип")); descriptionColumn.setCellValueFactory(new PropertyValueFactory("описание")); vendorColumn.setCellValueFactory(new PropertyValueFactory("vendor")); CostColumn.setCellValueFactory(new PropertyValueFactory("стоимость")); PriceColumn.setCellValueFactory(new PropertyValueFactory("цена")); InventoryTable.setItems(inventoryTable.getItems()); Но как мне переключить все на InventoryRecord, а не только на объект Inventory, .setCellValueFactory и PropertyValueFactory не нравится то, что они видят. Я попробовал это (с некоторой помощью Google Bard), и, похоже, для строк не выдается никаких ошибок: makeColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().make())); Но для свойств/столбцов List и Double я попробовал это:
categoryColumn.setCellValueFactory(cellData -> new SimpleListProperty(cellData.getValue().category())); CostColumn.setCellValueFactory(cellData -> new SimpleDoubleProperty(cellData.getValue().cost())); и я получаю следующие ошибки: Несоответствие типов: невозможно преобразовать SimpleListProperty в ObservableValue Несоответствие типов: невозможно преобразовать SimpleDoubleProperty в ObservableValue
Любая помощь очень ценна!
Я попробовал это:
while (result.hasNext()) { //result.next() служит нашим итератором, который увеличивает нас по записям и через цикл while. Запись запись = result.next(); Строка make = Record.get("make").asString(); Строковая модель = Record.get("модель").asString(); StringofficialModel = Record.get("officialModel").asString(); String upc = Record.get("upc").asString(); Категория List = Record.get("categories").asList(Value::asString); Тип строки = Record.get("тип").asString(); String desc = Record.get("описание").asString(); Строка поставщика = Record.get("вендор").asString(); Двойная стоимость = Record.get("стоимость").isNull() ? null: Record.get("стоимость").asDouble(); Двойная цена = Record.get("цена").isNull() ? null: Record.get("цена").asDouble(); // Создаем InventoryRecord непосредственно из записи InventoryRecord InventoryRecord = new InventoryRecord(марка,модель,официальнаямодель,UPC,категория,тип,дескриптор,поставщик,стоимость,цена); // Добавляем InventoryRecord к элементам таблицы InventoryTable.getItems().add(inventoryRecord); } //Фабрика значений свойств должна использовать имена свойств в качестве строковых аргументов в конструкторе makeColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().make())); modelColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().model())); OfficialModelColumn.setCellValueFactory(cellData -> новый SimpleStringProperty(cellData.getValue().officialModel())); CategoryColumn.setCellValueFactory(cellData -> new SimpleListProperty(cellData.getValue().category())); upcColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().upc())); typeColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().type())); descriptionColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().description())); vendorColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().vendor())); CostColumn.setCellValueFactory(cellData -> new SimpleDoubleProperty(cellData.getValue().cost())); PriceColumn.setCellValueFactory(cellData -> new SimpleDoubleProperty(cellData.getValue().price())); InventoryTable.setItems(inventoryTable.getItems()); но получил следующие ошибки: Несоответствие типов: невозможно преобразовать SimpleListProperty в ObservableValue Несоответствие типов: невозможно преобразовать SimpleDoubleProperty в ObservableValue
Я ожидаю чего-то вроде этого (вот как это работает с моим классом Inventory, который я пытаюсь заменить на InventoryRecord): TableView с использованием класса инвентаря
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как заполнить JavaFX TableView данными с помощью записи Java с данными из базы данных
Anonymous » » в форуме JAVA - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-
-
-
TableView не обновляется после добавления или обновления записи в JavaFX
Anonymous » » в форуме JAVA - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
TableView не обновляется после добавления или обновления записи в JavaFX
Anonymous » » в форуме JAVA - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-