Boa tarde devs!
Na img acima eu tenho tipo de Telefone “celular, fixo, etc…” e o número… Ao clicar em ADICIONAR NUMERO as duas informações vão para a tabela e eu posso inserir mais números de telefone… ao terminar eu clico em salvar e as informações são enviadas pro banco de dados corretamente… Quando eu consulto e recupero essas informações do Banco para a tela, tbm está vindo certinho! a Pergunta é: E se eu quiser, por exemplo, alterar um número ao clicar nesta tableview! Se eu tenho 3 número diferentes na table, eu consegui carrega-los nas textfields, mas quando eu vou alterar ele não altera e insere um número em outra linha!.. Espero ter sido claro… segue meus códigos e desde já agradeço a ajuda e conselhos!..
//Pega o Tipo de Telefone e o número de telefone e insere na tabela... Se houver mais de um número é só ir informando e clicando em ADICIONAR NÚMERO...
@FXML
private void adicionarTelefoneTabela(ActionEvent event) {
Integer index = Integer.parseInt(txtIndexador.getText().trim()) ;
String descricao = txtTipoNumeroTelefone.getText().trim();
String telefone = txtNumeroTelefone.getText().trim();
colIndexadorTelefone.setCellValueFactory(new PropertyValueFactory<>("indexador"));
colTipoTelefone.setCellValueFactory(new PropertyValueFactory<>("descricao"));
colNumeroTelefone.setCellValueFactory(new PropertyValueFactory<>("numeroTelefone"));
ModeloTabelaTelefone m = new ModeloTabelaTelefone(
index, descricao, telefone
);
tblTelefone.getItems().add(m);
txtTipoNumeroTelefone.clear();
txtNumeroTelefone.clear();
}
Aqui eu faço a iteração dos números da tableview e salvo no BD.
@FXML
private void salvarRegistro() {
List<ModeloTabelaTelefone> m = tblTelefone.getItems();
for (ModeloTabelaTelefone tab : m) {
mod.setIndexador(Integer.parseInt(txtIndexador.getText()));
mod.setFk_tipoTelefone(modTipoTelefone);
mod.setTelefone(tab.getNumeroTelefone());
dao.inserirRegistro(mod);
}
Aqui eu realizo a consulta para carregar as informações do BD na mesma tableview…
public void carregarTabelaBancoDados(){
ArrayList<ModAdministrativoAgendaContato> lista = dao.listaTabela();
ObservableList<ModeloTabelaAgendaTelefonica> observableList = FXCollections.observableArrayList();
colIndexadorAT.setCellValueFactory(new PropertyValueFactory<>("indexador"));
colNomeAT.setCellValueFactory(new PropertyValueFactory<>("nome"));
colDescricao.setCellValueFactory(new PropertyValueFactory<>("descricao"));
if (!observableList.isEmpty()) {
observableList.clear();
}
lista.stream().map((e) -> new ModeloTabelaAgendaTelefonica(
e.getIndexador(),
e.getNomeContato(),
e.getDescricaoContato()
)).forEachOrdered((m) -> {
observableList.add(m);
});
tblAgendaTelefonica.setItems(observableList);
}
Aqui com um duplo clique na linha que eu quero eu carrego os dados nas textFields
@FXML
private void carregarDadosCampos(MouseEvent event) {
if(event.getClickCount() == 2){
limparCampo();
Integer index = tblTelefone.getSelectionModel().getSelectedItem().getIndexador();
ModAdministrativoAgendaContatoTelefone m;
modTelefone = daoTelefone.getNumeroTelefoneInt(index);
txtTipoNumeroTelefone.setText(modTelefone.getFk_tipoTelefone().getDescricao());
txtNumeroTelefone.setText(modTelefone.getTelefone());
}
}
E é aí que mora o problema como alterar essa linha específica, atualizar a tableview e depois fazer UPDATE no banco de dados!

