Passagem de Informações Estilosa =D

Boa noite Pessoal! Gostaria de fazer algo bem interessante na minha aplicação e não estou conseguindo idealizar essa estrutura. Vamos lá!
Tenho uma aplica de cadastro com essa tela abaixo, com cadastro de Endereco completo. Vamos pegar o exemplo da cidade:
No campo cidade tem dois textFields:

  • TextField Código Cidade
  • Botão “…” que Consulta Cidades Cadastradas no BD
  • TextField Nome Cidade
  • Botão “+” que Adiciona Cidade no BD

    Quando clico no botão “…” abro a tela Consulta Cidade abaixo, apenas uma tabela que mostra as cidades cadastradas no BD e duas textfields para consulta quando tiver muitas cadastradas.

    O que eu quero exatamente é: Quando eu clicar duas vezes na cidade desejada da tabela, o código é carregado automaticamente no Textfield da Tela 1. Como eu implemento essa passagem de informação?
    Seguem meus códigos:

Minha consulta na Classe DAO:

public ArrayList listaTabela() {
ModeloCidade modCidade;
ModeloEstado modEstado;
ArrayList lista = new ArrayList<>();

    String sql = "SELECT codigo_ibge , cidade , fk_estado "
            + "FROM "+tabela+" "
            + "ORDER BY cidade";
    try {
        con.conectar();
        con.executaSQL(sql);
            while(con.resultSet.next()) {
                modCidade = new ModeloCidade();
                modEstado = new ModeloEstado();
                modCidade.setCodIbge(con.resultSet.getString("codigo_ibge"));
                modCidade.setCidade(con.resultSet.getString("cidade"));
                modEstado.setIndexador(con.resultSet.getInt("fk_estado"));
                modCidade.setFkEstado(modEstado);
                lista.add(modCidade);
        con.desconectar();
            }
    } catch (SQLException e) {
        con.desconectar();
        JOptionPane.showMessageDialog(null, e);
    }
    return lista;
}

Meu ModeloCidade:

public class ModeloCidade {

private String codIbge;
private String cidade;
private ModeloEstado fkEstado;

public ModeloCidade(String codIbge, String cidade, ModeloEstado fkEstado) {
    this.codIbge = codIbge;
    this.cidade = cidade;
    this.fkEstado = fkEstado;
}

//Getters e Setters…

Meu controller da tabela que mostra as cidades Cadastradas, da imagem 2:

package controller.administrativo;

import dao.DAOcidade;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
import modelo.ModeloCidade;
import modelo.ModeloTabelaCidade;

public class FXMLconsultaCidadeController implements Initializable {

ModeloCidade modCidade = new ModeloCidade();
DAOcidade daoCidade = new DAOcidade();

@FXML private Button btnCarregar;
@FXML private Button btnFechar;

@FXML private TextField txtPesquisaCodigoIbge;
@FXML private TextField txtPesquisaCidade;

@FXML private TableView<ModeloTabelaCidade> tblCidade;
@FXML private TableColumn<ModeloTabelaCidade, ?> colCodigoIbge;
@FXML private TableColumn<ModeloTabelaCidade, ?> colCidade;
@FXML private TableColumn<ModeloTabelaCidade, ?> colEstado;

@Override
public void initialize(URL url, ResourceBundle rb) {
    carregarTabelaBancoDados();
}

public void carregarTabelaBancoDados(){
    ArrayList<ModeloCidade> listaCidade = daoCidade.listaTabela();
    ObservableList<ModeloTabelaCidade> observableListTabela = FXCollections.observableArrayList();
    colCodigoIbge.setCellValueFactory(new PropertyValueFactory<>("codigoIbge"));
    colCidade.setCellValueFactory(new PropertyValueFactory<>("cidade"));
    colEstado.setCellValueFactory(new PropertyValueFactory<>("estado"));
    
    if(!observableListTabela.isEmpty()){
        observableListTabela.clear();
        System.out.println("Tabela Limpa");
    }
    listaCidade.stream().map((c) -> new ModeloTabelaCidade(
            c.getCodIbge(),
            c.getCidade() ,
            c.getFkEstado().getEstadoNome()
    )).forEachOrdered((m) -> {
        observableListTabela.add(m);
    });
    tblCidade.setItems(observableListTabela);
}

Vou agradecer muito quem puder me ajudar ou me dar dicas de como implementar o código pra fazer isso! Vlw galera! Abs. Lembrando, clicar na cidade desejada e carregar a informação na tela 1 no textField!

Pesquise sobre o pattern observer.

1 curtida

Estou pensando em algo bem simplório, isso está me parecendo um programa desktop, como a tela 2(a que vai ter a lista de endereço) ela vai depender da tela 1 para aparecer, você poderia colocar no construtor da tela 2 um parâmetro do tipo da tela 1, setar esse objeto na sua classe da tela 1 e a partir desse objeto encontrar o textField para modificar e jogar o valor nele(capture o valor d acidade quando dê o clique).

1 curtida

Exatamente Fábio, é um Desktop sim, estou escrevendo para aprendizado e vou tentar fazer desta forma! Valeu, retorno aqui em breve caso tenha dúvidas!