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

3 respostas Resolvido
G

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

3 Respostas

J

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

J
Solucao aceita

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

G

Muito obrigado :slight_smile:

Criado 30 de julho de 2020
Ultima resposta 5 de ago. de 2020
Respostas 3
Participantes 2