Boa noite Srs. Estou com dificuldades de encontrar solução para um problema com a população do TableView. Segue minha dúvida.
Tenho duas tabelas SQL, conforme abaixo: TBL_CIDADE e TBL_ESTADO. na tbl_cidade há uma chave estrangeira chamando a coluna id_estado. Assim quando o usuários insere uma cidade ele precisa passar o id do estado obrigatoriamente.
Como podem ver a
A parte SQL está tudo ok! o problema é quando eu listo as cidades na TableView que eu não estou sabendo implementar o código para tbm mostrar o nome do estado. Vejam abaixo que os codigos e os nomes das cidades aparecem, mas o estado eu não soube como puxar essa informação:
Se alguém puder indicar um artigo ou me dar uma luz de como implementar isso. eu agradeço mto!
Segue meus outros códigos:
ModeloCidade
package modelo;
public class ModEnderecoCidade {
private String codIbge;
private String cidade;
private ModEnderecoEstado fkEstado; //Aqui eu acesso o objeto Estado
public ModEnderecoCidade(String codIbge, String cidade, ModEnderecoEstado fkEstado) {
this.codIbge = codIbge;
this.cidade = cidade;
this.fkEstado = fkEstado;
}
public ModEnderecoCidade(){
}
//Getters e Setters...
}
ModeloEstado
package modelo;
public class ModEnderecoEstado {
private int indexador;
private String estadoNome;
private String estadoSigla;
private ModEnderecoPais fk_pais;
public ModEnderecoEstado(int indexador, String estadoNome, String estadoSigla, ModEnderecoPais fk_pais) {
this.indexador = indexador;
this.estadoNome = estadoNome;
this.estadoSigla = estadoSigla;
this.fk_pais = fk_pais;
}
public ModEnderecoEstado(){
}
//Getters e Setters...
}
ModeloTabelaCidade -> Modelo utilizado para popular a tabelaCidade
package modelo;
import javafx.beans.property.SimpleStringProperty;
public class ModeloTabelaConsultaCidade {
private SimpleStringProperty codigoIbge;
private SimpleStringProperty cidade;
private SimpleStringProperty fk_estado;
public ModeloTabelaConsultaCidade(String codigoIbge , String cidade , String fk_estado) {
this.codigoIbge = new SimpleStringProperty(codigoIbge);
this.cidade = new SimpleStringProperty(cidade);
this.fk_estado = new SimpleStringProperty(fk_estado);
}
public ModeloTabelaConsultaCidade(){
}
public String getCodigoIbge() {
return codigoIbge.get();
}
public String getCidade() {
return cidade.get();
}
public String getFk_estado() {
return fk_estado.get();
}
}
Classe DAO - Consulta cidade no Banco de Dados.
public ArrayList<ModEnderecoCidade> listaTabela() {
ModEnderecoCidade modCidade;
ModEnderecoEstado modEstado;
ArrayList<ModEnderecoCidade> 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 ModEnderecoCidade();
modEstado = new ModEnderecoEstado();
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 Controller.
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.ModEnderecoCidade;
import modelo.ModeloTabelaConsultaCidade;
public class FXMLconsultaCidadeController implements Initializable {
ModEnderecoCidade modCidade = new ModEnderecoCidade();
DAOcidade daoCidade = new DAOcidade();
@FXML private Button btnCarregar;
@FXML private Button btnFechar;
@FXML private TextField txtPesquisaCodigoIbge;
@FXML private TextField txtPesquisaCidade;
//Propriedades da TableView
@FXML private TableView<ModeloTabelaConsultaCidade> tblCidade;
@FXML private TableColumn<ModeloTabelaConsultaCidade, String> colCodigoIbge;
@FXML private TableColumn<ModeloTabelaConsultaCidade, String> colCidade;
@FXML private TableColumn<ModeloTabelaConsultaCidade, ?> colEstado; //Aqui carregar nomeEstado - Só não sei como =/
@Override
public void initialize(URL url, ResourceBundle rb) {
carregarTabelaBancoDados();
}
//Metodo para carregar informações das Cidades na TableView
public void carregarTabelaBancoDados(){
ArrayList<ModEnderecoCidade> listaCidade = daoCidade.listaTabela();
ObservableList<ModeloTabelaConsultaCidade> 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 ModeloTabelaConsultaCidade(
c.getCodIbge(),
c.getCidade() ,
c.getFkEstado().getEstadoNome()
)).forEachOrdered((m) -> {
observableListTabela.add(m);
});
tblCidade.setItems(observableListTabela);
btnCarregar.setDisable(false);
}
Agradeço se alguém me der uma luz!