Ação do botão dentro de uma TableView JavaFx

Boa noite pessoal! Tudo bem com vocês!
Eu to com uma dificuldade de fazer a ação de um botão dentro de uma tableview alguem pode me ajudar?


A ideia é de cada vez que eu clicar em um desses botões pagar a parcela, mas eu não estou conseguindo fazer este evento…

Eu sou novo aqui no guj e esta é minha primeira publicação, se o código que eu mandar ficar não padronizado eu peço desculpas…

Preenchimento da TableView
@FXML private TableColumn<Titulos, Integer>
tcl_Pagamento_Parcelas;
@FXML
public void colocando_TableView(int id_Venda)
{
tcl_Id_Titulo.setCellValueFactory(new
PropertyValueFactory(“id_Titulo”));
tcl_Nome_Cliente.setCellValueFactory(new
PropertyValueFactory(“Cliente_Titulo”));
tcl_Valor_Parcela.setCellValueFactory(new
PropertyValueFactory(“valor_Parcela”));

tcl_Data_Vencimento.setCellValueFactory(new 
PropertyValueFactory("data_Vencimento"));

tcl_Pagamento_Parcelas.setCellValueFactory(new PropertyValueFactory(“button”));
try { tbv_Exibicao_Titulos.setItems(atualizar_Tabela(id_Venda));
} catch (SQLException ex) { Logger.getLogger(FXML_Clientes_CadastroController.class.getName()).log(Level.SEVERE, null, ex);
}
}

@FXML
public ObservableList<Titulos> atualizar_Tabela(int id_Venda) throws SQLException{
    Titulos_DAO ted = new Titulos_DAO();
    return FXCollections.observableArrayList(ted.clientes_Titulos(id_Venda));    
}

Modelo
public class Titulos{
private int id_Titulo;
private int valor_Parcela;
private Date data_Vencimento;
private Pagamento_Venda id_Pagamento;
private String tipo_Conta;

public int getId_Titulo() {
    return id_Titulo;
}

public void setId_Titulo(int id_Titulo) {
    this.id_Titulo = id_Titulo;
}

public int getValor_Parcela() {
    return valor_Parcela;
}

public void setValor_Parcela(int valor_Parcela) {
    this.valor_Parcela = valor_Parcela;
}

public Date getData_Vencimento() {
    return data_Vencimento;
}

public void setData_Vencimento(Date data_Vencimento) {
    this.data_Vencimento = data_Vencimento;
}

public Pagamento_Venda getId_Pagamento() {
    return id_Pagamento;
}

public void setId_Pagamento(Pagamento_Venda id_Pagamento) {
    this.id_Pagamento = id_Pagamento;
}

public String getTipo_Conta() {
    return tipo_Conta;
}

public void setTipo_Conta(String tipo_Conta) {
    this.tipo_Conta = tipo_Conta;
}

public String getCliente_Titulo(){
    return id_Pagamento.getId_Vendas().getId_Cliente().getNome_Cliente();
}

private Button button;

public Button getButton() {
    return button;
}

public void setButton(Button button) {
    this.button = button;
}

public Titulos() {
    this.button = new Button ("Pagar Parcela");
}

Agradeço imensamente quem poder me ajudar, estou em época de tcc e não consigo prosseguir por causa disto

Se até o final da semana vc não conseguir resolver, Eu darei uma olhada.

1 curtida

Veja esse exemplo simples, então é somente adaptar no seu codigo.
Detalhes para colBtn.setCellFactory(cellFactory); e tambem para setGraphic(btn); esse é um recurso interessante do JavaFX que permite a pratica de colocar qualquer Node na celula.

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
import javafx.util.Callback;

public class TableViewSample extends Application {

    private final TableView<Data> table = new TableView<>();
    private final ObservableList<Data> tvObservableList = FXCollections.observableArrayList();

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {

        stage.setTitle("Tableview com Botao de Evento");
        stage.setWidth(600);
        stage.setHeight(600);

        setTableappearance();

        fillTableObservableListWithSampleData();
        table.setItems(tvObservableList);

        TableColumn<Data,Integer> colId = new TableColumn<>("ID");
        colId.setCellValueFactory(new PropertyValueFactory<>("id"));

        TableColumn<Data, String> colName = new TableColumn<>("Nome");
        colName.setCellValueFactory(new PropertyValueFactory<>("nome"));

        table.getColumns().addAll(colId, colName);

        addButtonToTable();

        Scene scene = new Scene(new Group(table));

        stage.setScene(scene);
        stage.show();
    }

    private void setTableappearance() {
        table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
        table.setPrefWidth(600);
        table.setPrefHeight(600);
    }

    private void fillTableObservableListWithSampleData() {

        tvObservableList.addAll(new Data(1, "Venda"),
                                new Data(2, "Venda"), 
                                new Data(3, "Venda"), 
                                new Data(4, "Venda"),
                                new Data(5, "Venda"));
    }

    private void addButtonToTable() {
        TableColumn<Data, Void> colBtn = new TableColumn("Button Column");

        Callback<TableColumn<Data, Void>, TableCell<Data, Void>> cellFactory = new Callback<TableColumn<Data, Void>, TableCell<Data, Void>>() {
            @Override
            public TableCell<Data, Void> call(final TableColumn<Data, Void> param) {
                final TableCell<Data, Void> cell = new TableCell<Data, Void>() {

                    private final Button btn = new Button("Pagar Parcela");

                    {
                        btn.setOnAction((ActionEvent event) -> {
                            Data data = getTableView().getItems().get(getIndex());
                            Alert alert = new Alert(AlertType.INFORMATION);
                            alert.setTitle("Pagamento");
                            alert.setHeaderText("Pagamento Parcela");
                            alert.setContentText("referencia ID = " + data.getId() );

                            alert.showAndWait(); 
                        });
                    }

                    @Override
                    public void updateItem(Void item, boolean empty) {
                        super.updateItem(item, empty);
                        if( empty ) {
                            setGraphic(null);
                        } else {
                            Data data = getTableView().getItems().get(getIndex());
                            btn.setText(btn.getText() + " " + data.getId() );
                            setGraphic(btn);
                        }
                    }
                };
                return cell;
            }
        };

        colBtn.setCellFactory(cellFactory);

        table.getColumns().add(colBtn);

    }

    public class Data {

        private int id;
        private String nome;

        private Data(int id, String nome) {
            this.id = id;
            this.nome = nome;
        }

        public int getId() {
            return id;
        }

        public void setId(int ID) {
            this.id = ID;
        }

        public String getNome() {
            return nome;
        }

        public void setNome(String nome) {
            this.nome = nome;
        }

        @Override
        public String toString() {
            return "id: " + id + " - " + "name: " + nome;
        }

    }
}

Bons Codigos

Muito obrigado :slight_smile:

1 curtida