Estou tentando passar um objeto de um form para o outro em pequeno sistema, mas só me retorna null, na tela principal.
Quero passar dessa tela Estados para a de trás, que é o formulário principal do cadastro.
o que fiz foi isso. Quando clico no botão confirmar dos Estados ele faz isso
intlinha=jTableEstados.getSelectedRow();if(linha==-1){System.out.println("Você precisa selecionar um estado");JOptionPane.showMessageDialog(this,"Você não selecionou nenhum estado","Ops!",JOptionPane.INFORMATION_MESSAGE);}else{intcodigoEstado=(int)jTableEstados.getValueAt(linha,0);Stringuf=String.valueOf(jTableEstados.getValueAt(linha,1));EstadoDaoestadoDao=DaoFactory.createEstadoDao();Estadoe=(estadoDao.findById(codigoEstado));estado2.setCodigoUF(e.getCodigoUF());estado2.setNome(e.getNome());estado2.setUf(e.getUf());System.out.println("completo"+estado2.getNome());System.out.println("completo"+estado2.getUf());System.out.println("completo"+estado2.getCodigoUF());this.dispose();}
viewUF é a instância que está em execução quando a tabela para seleção está aberta?
Em que ponto do ViewUF você seta o atributo estado2, que até onde entendo, deveria ser devolvido pelo getEstado2()?
R
ravesync
viewUF é essa tela da jtable que tá por cima;
crio ele aqui.
public class ViewUF extends javax.swing.JFrame {
/** * @return the estado2 */publicEstadogetEstado2(){returnestado2;}/** * @param estado2 the estado2 to set */publicvoidsetEstado2(Estadoestado2){this.estado2=estado2;}privateEstadoestado2=newEstado();/** * Creates new form ViewUF */publicViewUF(){initComponents();listarUf();}
darlan_machado
Mas onde você invoca o setEstado2???
R
ravesync
ah tinha esquecido de copiar ele.
Aqui
intlinha=jTableEstados.getSelectedRow();if(linha==-1){System.out.println("Você precisa selecionar um estado");JOptionPane.showMessageDialog(this,"Você não selecionou nenhum estado","Ops!",JOptionPane.INFORMATION_MESSAGE);}else{intcodigoEstado=(int)jTableEstados.getValueAt(linha,0);Stringuf=String.valueOf(jTableEstados.getValueAt(linha,1));EstadoDaoestadoDao=DaoFactory.createEstadoDao();Estadoe=(estadoDao.findById(codigoEstado));estado2.setCodigoUF(e.getCodigoUF());estado2.setNome(e.getNome());estado2.setUf(e.getUf());System.out.println("completo"+estado2.getNome());System.out.println("completo"+estado2.getUf());System.out.println("completo"+estado2.getCodigoUF());this.dispose();}
darlan_machado
Uma coisa que não está fazendo muito sentido é que… Quando você executa esta linha
Você está com a janela aberta, correto?
Porém, para executar esta
Você não espera a execução da janela, logo, você está obtendo um valor nulo, afinal, não é desse modo que deve ocorrer.
É o evento de selecionar a linha e, consequentemente, o estado, que deve disparar um evento no objeto principal (janela principal) e não o inverso.
Segue o raciocício:
Você abre a tela viewUF
ViewUF viewUF = new ViewUF();
Então, você recupera o estado (janela principal)
estado = viewUF.getEstado2();
Tenta printar algo
System.out.println(“Estado”+estado.getNome());
Aqui já estoura o NPE. Enquanto isso, a viewUF está lá, aberta. Quando você define qual estado selecionou
Eu chamo o ViewUF viewUF = new ViewUF(); quando eu clico no botão da lupa. Aí a tela viewUf é aberta com os estados. Aí quando eu clico no confirmar da viewUF ele pega os dados certinhos que foram selecionados. Porém não acesso eles da viewPrincipal que é a que vai realmente salvar no banco. Devo estar instanciando errado ou chamando errado na principal
darlan_machado
Olha como você abre a janela viewUF:
Você não passa nenhuma referência à instância da janela principal. Como pretende acessar algo desse objeto se viewUF desconhece ele?
R
ravesync
Consegui resolver assim. Chamei a viewUF assim que abro a principal, mas só dou um new ViewUF quando clico na lupa.
public class ViewCadastrarEstabelecimento extends javax.swing.JInternalFrame {