Olá srs. Estou com algumas dúvidas sobre passar parâmetro entre controllers, vou postar meu código e explicar… Em uma tela simples eu tenho uma tabela com informações do Banco de Dados, ao clicar na linha da tabela desejada eu carrego aquela informação no textField que está em outra tela. Ou seja, a tabela está em um controller e o textField está em outro. Para passar o parâmetro eu usei o seguinte código.
Código do Controller da tableView. - Apaguei os códigos que ñ eram importante para o tópico…
package controller.administrativo;
public class FXMLconsultaEmpresaController implements Initializable {
public static FXMLconsultaEmpresaController consultaEmpresaController; //Variavel estatica do proprio controller
@Override
public void initialize(URL url, ResourceBundle rb) {
consultaEmpresaController = this; //Aqui eu inicio a variavel criada acima, assim eu consigo acessar qualquer metodo da classe em qualquer outra classe.
carregarTabelaBancoDados(); //chamando os dados do banco e populando a tableView assim que abre a tela
}
//Metodo para popular a tableView com informacoes do Banco de Dados, está operacional!
public void carregarTabelaBancoDados(){
ArrayList<Empresa> lista = dao.listaTabela();
ObservableList<TabelaEmpresa> observableList = FXCollections.observableArrayList();
colCodigo.setCellValueFactory(new PropertyValueFactory<>("id"));
colRazaoSocial.setCellValueFactory(new PropertyValueFactory<>("razaoSocial"));
colCNPJ.setCellValueFactory(new PropertyValueFactory<>("cnpj"));
if(!observableList.isEmpty()){
observableList.clear();
System.out.println("Tabela Limpa");
}
lista.stream().map((c) -> new TabelaEmpresa(
c.getId() ,
c.getRazaoSocial() ,
c.getFk_documento()
)).forEachOrdered((m) -> {
observableList.add(m);
});
tblEmpresa.setItems(observableList);
btnCarregar.setDisable(false);
}
//Botao que carrega a informação selecionada manda para o outro controller
@FXML
private void carregarInformacaoEmpresa(){
if(tblEmpresa.getSelectionModel().getSelectedItem() == null){
JOptionPane.showMessageDialog(null , "Selecione um ítem na tabela para carregar a informação!");
return;
}else{
Integer id = tblEmpresa.getSelectionModel().getSelectedItem().getId();
String empresa = tblEmpresa.getSelectionModel().getSelectedItem().getRazaoSocial();
String cnpj = tblEmpresa.getSelectionModel().getSelectedItem().getCnpj();
//Aqui eu faço uma instancia do controller que eu e chamo o metodo para passar as informacoes e conforme os parametros e fecho a janela
FXMLcadastroEmpresaController.cadastroEmpresaController.receberParametroEmpresa(id , empresa , cnpj);
Stage stage = (Stage) btnFechar.getScene().getWindow();
stage.close();
}
}
//Fima da Classe
}
Agora vou mostrar a classe que recebe os parametros da Classe FXMLconsultaEmpresaController: - Mais uma vez, vou apagar os codigos inuteis à duvida…
package controller.financeiro;
public class FXMLcadastroEmpresaController implements Initializable {
//Aqui está o metodo chamado no Controller acima, recebendo os parametros pegos na tableView setados nas variaveis e jogando pra, e cada textField recebe essas varias e seta nos campos.
public void receberParametroEmpresa(Integer id , String empresa , String cnpj){
txtCodigoEmpresaCompradora.setText(String.valueOf(id));
txtRazaoSocialEmpresaCompradora.setText(empresa);
lblCnpjEmpresaCompradora.setText(cnpj);
txtCodigoFornecedor.requestFocus();
}
//Fim da Class
}
Tudo funciona, informações sendo carregadas na tableView, selecionar o item na tabela e passar o parâmetro para o outro controller, tudo está indo…
Minhas dúvidas são as seguintes.
1 - Esse método de passagem de parâmetros é usual? ou é apenas uma “gambiarra”?
2 - Caso eu precise passar esses mesmos parâmetros para um segundo controller, como eu faria para tratar essa condição no controller da tableView para passar as informações a vários controllers?
Espero ter sido claro na dúvida e desde já agradeço os conselhos e ajuda!