У меня есть TableView, который содержит 3 столбца, два из них редактируются с помощью TextFields, чтобы позволить пользователю вводить данные в них, но когда я получаю элементы из таблицы, он возвращает то, что не находится в TextFields, как на изображении, и не возвращает правильные числа в ячейки
Таблица с образцами данных
это мой код:
Изменить Я обнаружил, что проблема в моем ObservableList (данные) я добавляю действие в TextField для обновления данных с новым значением, но как заставить код обновлять различные строки, потому что он обновляет значение с последним значением в TextField и избавляется от нажатия клавиши ENTER, чтобы получить все значение в TxtField, потому что он игнорирует последний символ например, если ввести «30» в TxtField, я получаю «3», а не «30»
productQuantity.setCellFactory(new Callback <TableColumn, TableCell> ()
{
@Override
public TableCell call(TableColumn param)
{
return new TableCell()
{
private TextField txtProductQuantity;
@Override
protected void updateItem(Object item, boolean empty)
{
super.updateItem(item, empty);
if(!empty)
{
setGraphic(getTextField());
}
else
{
setGraphic(null);
}
}
public TextField getTextField()
{
if(txtProductQuantity == null)
{
txtProductQuantity = new TextField();
txtProductQuantity.setAlignment(Pos.BASELINE_RIGHT);
txtPurchaseItemPrice.setOnKeyPressed(e ->
{
data.get(0).setPurchaseItemPrice(txtPurchaseItemPrice.getText());
});
}
return txtProductQuantity;
}
};
}
});
productQuantity.setOnEditCommit(new EventHandler<CellEditEvent<ProductOpeningBalance, String>> ()
{
@Override
public void handle(CellEditEvent<ProductOpeningBalance, String> t)
{
((ProductOpeningBalance)
t.getTableView().getItems().get(t.getTablePosition().getRow())
).setProductQuantity(t.getNewValue());
}
});
код для извлечения данных из таблицы
size = tableProductOpeningBalance.getItems().size();
for(int i = 0; i < size; i++)
{
System.out.println(tableProductOpeningBalance.getItems().get(i).getPurchaseItemPrice());
}
, пожалуйста, помогите?