Редактировать ячейку JavaFx TableView с TextField в разных столбцах - PullRequest
0 голосов
/ 03 марта 2020

У меня есть 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());
    }

, пожалуйста, помогите?

...