JavaFX извлекает значение из n-го столбца каждой строки в TableView - PullRequest
0 голосов
/ 22 ноября 2018

Извините за заголовок, я не мог придумать ничего лучшего для него.

Следующая таблица - это то, с чем я сейчас работаю enter image description here

Ниже приведен мой код для создания столбцов и автоматического заполнения трех из 4-х столбцов из ObservableList.Четвертый столбец, упорядоченный #, доступен для редактирования пользователем.Моя цель состоит в том, чтобы перебирать каждую строку и обновлять элемент этой строки значением, введенным для него пользователем.Я успешно прошел итерацию по строкам и получил объекты Item из строки, но я не смог найти правильный способ получить значение заказа для этой строки.

TableView tableView = new TableView();
TableColumn itemCodeColumn = new TableColumn("Item Code");
TableColumn itemDescriptionColumn = new TableColumn("Description");
TableColumn numAvailableColumn = new TableColumn("# in Stock");
TableColumn numOrderColumn = new TableColumn("# Ordered");

itemCodeColumn.setCellValueFactory(new PropertyValueFactory<Item,Integer>("itemCode"));
itemDescriptionColumn.setCellValueFactory(new PropertyValueFactory<Item,String>("itemDesc"));
numAvailableColumn.setCellValueFactory(new PropertyValueFactory<Item,Integer>("quantity"));

Я смогполучить доступ ко всем элементам, найденным в моем tableView, используя следующую команду

for(Object it : tableView.getItems()){
    Item it2 = (Item) it;
}

, однако это только дает мне ссылку на объект для обновления упорядоченного значения, мне все еще нужен способ получить фактический номер заказа из таблицы.Для этого я использовал следующий фрагмент кода, который нашел в Интернете.Обратите внимание, что itemGUIList - это ObservableList, который используется для заполнения таблицы.

for(int c=0;c<itemGUIList.size();c++){
     Object o;
     o = tableView.getColumns().get(c).getCellObservableValue(0).getValue();
}

Проблема, с которой я столкнулся, заключалась в том, что метод getCellObservableValue () дал мне ошибку «не удается найти символ».Поиск этого не дал мне никаких результатов, и этот фрагмент кода, похоже, работал для всех остальных.

Если кто-то может указать, что мне не хватает, или есть лучший способ решить эту проблемупроблема, я был бы очень признателен.Если вы хотите, чтобы я опубликовал свой код, сообщите мне, и я сделаю это.Спасибо заранее.

1 Ответ

0 голосов
/ 22 ноября 2018

В вашем объявлении TableView вы используете необработанный тип.

В результате тип tableView.getColumns() будет ObservableList и, следовательно, тип tableView.getColumns().get(c) будет Object, который не содержит метод getCellObservableValue.

Вы должны добавить параметр типа в объявление, даже если вы используете ? для решения этой проблемы:

TableView<Item> tableView = new TableView<>();

или

TableView<?> tableView = new TableView<>();

Примечание:

Желательно не использовать необработанный тип, если это возможно, поскольку это позволяет компилятору выполнять некоторую проверку типов, а такжеИзбегайте необходимости записывать некоторые приведения в ваш код, например,

for(Object it : tableView.getItems()) {
    Item it2 = (Item) it;
}

можно просто изменить на

for(Item it2 : tableView.getItems()) {
}

На самом деле используйте TableColumn для получения количества заказов, которые должныне нужно, хотя.Вы можете просто извлечь его из самого элемента (или из другого места, где хранятся эти данные), например:

Item item = tableView.getItems().get(0);
int ordered = item.getOrdered();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...