2

TablViewを作成したところ、データを入れることに成功しました。問題は、(更新するために)セルをダブルクリックすると更新されたデータが表示されますが、更新されたセルをクリックすると古いデータが表示されることです。

ここにコードがあります:

    table = new TableView<InvoiceLine>();
                        table.setEditable(true);


                        Callback<TableColumn, TableCell> cellFactory =
                                new Callback<TableColumn, TableCell>() {

                                    public TableCell call(TableColumn p) {
                                        return new EditingCell();
                                    }
                                };

                        ObservableList<InvoiceLine> data = FXCollections.observableArrayList(invoice_Lines);
                        table.setItems(data);


                        designationCol = new TableColumn("Designation");
                        designationCol.onEditCommitProperty();
                        designationCol.setCellValueFactory(new PropertyValueFactory<InvoiceLine, String>("invoicelineDesignation"));
                        designationCol.setCellFactory(cellFactory);
                        designationCol.setOnEditCommit(new EventHandler<CellEditEvent<InvoiceLine, String>>() {

                            @Override
                            public void handle(CellEditEvent<InvoiceLine, String> t) {
                                ((InvoiceLine) t.getTableView().getItems().get(
                                        t.getTablePosition().getRow())).setInvoicelineDesignation(t.getNewValue());
                                System.out.println(t.getNewValue());
                            }
                        });

                        TableColumn quantiteCol = new TableColumn("Quantite");

                        quantiteCol.setCellValueFactory(
                                new PropertyValueFactory<InvoiceLine, String>("invoicelineQuantity"));
                        quantiteCol.setCellFactory(cellFactory);

                        quantiteCol.setOnEditCommit(
                                new EventHandler<CellEditEvent<InvoiceLine, String>>() {

                                    @Override
                                    public void handle(CellEditEvent<InvoiceLine, String> t) {
                                        ((InvoiceLine) t.getTableView().getItems().get(
                                                t.getTablePosition().getRow())).setInvoicelineQuantity(t.getNewValue());
                                        System.out.println(t.getNewValue());
                                    }
                                });

                        TableColumn puCol = new TableColumn("Prix Unitaire");

                        puCol.setCellValueFactory(
                                new PropertyValueFactory<InvoiceLine, String>("invoicelineUnitPrice"));
                        puCol.setCellFactory(cellFactory);

                        puCol.setOnEditCommit(
                                new EventHandler<CellEditEvent<InvoiceLine, String>>() {

                                    @Override
                                    public void handle(CellEditEvent<InvoiceLine, String> t) {
                                        ((InvoiceLine) t.getTableView().getItems().get(
                                                t.getTablePosition().getRow())).setInvoicelineUnitPrice(t.getNewValue());
                                        System.out.println(t.getNewValue());
                                    }
                                });

                        TableColumn totalCol = new TableColumn("Total");

                        totalCol.setCellValueFactory(
                                new PropertyValueFactory<InvoiceLine, String>("invoicelineAmount"));
                        totalCol.setCellFactory(cellFactory);


                        totalCol.setOnEditCommit(
                                new EventHandler<CellEditEvent<InvoiceLine, String>>() {

                                    @Override
                                    public void handle(CellEditEvent<InvoiceLine, String> t) {
                                        ((InvoiceLine) t.getTableView().getItems().get(
                                                t.getTablePosition().getRow())).setInvoicelineAmount(t.getNewValue());
                                        System.out.println(t.getNewValue());
                                    }
                                });

                        table.getColumns().addAll(designationCol, quantiteCol, puCol, totalCol);
                        centerSplitPane.setBottom(table);
                    }
                });

誰か助けてもらえますか?thks

4

1 に答える 1

1

TableViewの公式チュートリアルに従っている場合は、セルの編集モードでEnterキーを押して、変更をコミットします。EditingCellまたは、次を追加してソースコードを編集します。

textField.focusedProperty().addListener(new ChangeListener<Boolean>() {

    @Override
    public void changed(ObservableValue<? extends Boolean> arg0, Boolean arg1, Boolean arg2) {
        if (!arg2) {
            commitEdit(textField.getText());
        }
    }
});

createTextField()メソッドに。textFieldこれにより、フォーカスが失われたときに変更がコミットされます。

于 2012-05-25T16:54:28.030 に答える