public void mostrarPessoa() {
if( pessoa == null ) {
return;
}
jtfNome.setText( pessoa.getNome() );
jtfEmail.setText( pessoa.getEmail() );
jtfEndereco.setText( pessoa.getEndereco().getLogradouro() );
jtfNumero.setText( pessoa.getEndereco().getNumero() );
jtfComplemento.setText( pessoa.getEndereco().getComplemento() );
jtfCidade.setText( pessoa.getEndereco().getCidade());
jtfCelular.setText( pessoa.getEndereco().getCidade() );
jtfTelefone.setText( pessoa.getTelefone() );
jtfCelular.setText( pessoa.getCelular() );
comboUF.setSelectedItem( pessoa.getEndereco().getUf() );
}
Esse método seta os textos.
A pessoa está cadastrando perfeitamente, e os dados estão sendo retornados perfeitamento (e eu vi isso através de testes usando system.out.println). O problema é que as vezes alguns campos, mesmo preenchidos, aparecem vazios, por exemplo, vou editar a mesma pessoa 3 vezes, na primeira vez abre a tela de edição aparecendo nome/telefone/celular, daí fecho e abro a tela pra editar ela de novo, daí aparece os textos dos campos celular/telefone/numero/complemento/cidade, dps faço de novo e aparecem outros campos.
Na hora de salvar os dados da pessoa de novo, aparecem como se todos os textfields estivessem preenchidos conforme os dados puxados la no settext, mesmo que alguns deles pareçam estar vazios.
Screens


Quem puder me ajudar, obrigado!
Cara, você deve estar cometendo algum erro no código em algum lugar do programa. O que você postou ainda não é o suficiente para saber.
-
Verifique se você não testa se o getText() retorna nulo ou em algum lugar testa se o valor que veio dele é nulo. O método getText() nunca retorna nulo (ele retorna “” quando a caixa de texto está vazia).
-
Verifique se não há nenhum erro nos seus setters deste tipo:
[code]// Bug, o parâmetro tá com o nome errado e o setter não funciona.
public void setCoisa(String koisa) {
this.coisa = coisa;
}
// Bug, está atribuindo ao parâmetro, e não ao atributo.
public void setCoisa(String coisa) {
coisa = coisa;
}[/code]
-
Verifique os seus getters em busca de erros semelhantes.
-
Verifique se a lógica ao ler ou gravar estes dados está realmente certa. Em especial se você não se esquece de salvar ou de ler algum campo.
os getters e setters foram gerados pelo proprio netbeans e estão ok, vou colar o codigo aqui, foi tudo feito no netbeans automaticamente, basicamente as alterações foram nos botoes cadastrar e nesse metodo postado antes…
[code]public class CadastroContato extends javax.swing.JDialog {
private Pessoa pessoa;
/** Creates new form CadastroContato */
public CadastroContato( java.awt.Frame parent, boolean modal ) {
super( parent, modal );
initComponents();
pessoa = new Pessoa();
}
public CadastroContato( java.awt.Frame parent, boolean modal, Pessoa pessoa ) {
this( parent, modal );
this.pessoa = pessoa;
initComponents();
mostrarPessoa();
}
public void mostrarPessoa() {
if( pessoa == null ) {
return;
}
jtfNome.setText( pessoa.getNome() );
jtfEmail.setText( pessoa.getEmail() );
jtfEndereco.setText( pessoa.getEndereco().getLogradouro() );
jtfNumero.setText( pessoa.getEndereco().getNumero() );
jtfComplemento.setText( pessoa.getEndereco().getComplemento() );
jtfCidade.setText( pessoa.getEndereco().getCidade());
jtfCelular.setText( pessoa.getEndereco().getCidade() );
jtfTelefone.setText( pessoa.getTelefone() );
jtfCelular.setText( pessoa.getCelular() );
comboUF.setSelectedItem( pessoa.getEndereco().getUf() );
}
private void initComponents() {
// CÓDIGO GERADO AUTOMATICAMENTE, tirei pra facilitar a leitura
}
private void jboCadastrarActionPerformed(java.awt.event.ActionEvent evt) {
try {
pessoa.setNome( jtfNome.getText() );
pessoa.setCelular( jtfCelular.getText() );
pessoa.setEmail( jtfEmail.getText() );
pessoa.getEndereco().setNumero( jtfNumero.getText() );
pessoa.getEndereco().setComplemento( jtfComplemento.getText() );
pessoa.getEndereco().setLogradouro( jtfEndereco.getText() );
pessoa.getEndereco().setCidade( jtfCidade.getText() );
pessoa.getEndereco().setUf( comboUF.getSelectedItem().toString() );
pessoa.setTelefone( jtfTelefone.getText() );
ContatoNegocio.gravar( pessoa );
JOptionPane.showMessageDialog( this, “Contato cadastrado com sucesso” );
this.dispose();
} catch( NegocioException e ) {
JOptionPane.showMessageDialog( this, e.getMessage(), “Erro”, JOptionPane.ERROR_MESSAGE );
}
}
}
// Variables declaration - do not modify
private javax.swing.JComboBox comboUF;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JButton jboCadastrar;
private javax.swing.JTextField jtfCelular;
private javax.swing.JTextField jtfCidade;
private javax.swing.JTextField jtfComplemento;
private javax.swing.JTextField jtfEmail;
private javax.swing.JTextField jtfEndereco;
private javax.swing.JTextField jtfNome;
private javax.swing.JTextField jtfNumero;
private javax.swing.JTextField jtfTelefone;
// End of variables declaration
}[/code]
reforçando: os dados estão sendo gravados perfeitamente, e utilizando gettext nos jtextfields na hora de editar, mesmo estando vazios (como na screen), é como se os dados estivessem la e só nao aparecem, ou aparecem faltando caracteres, bizarro
Coloca um catch(Throwable t) no método mostrarPessoa e no método jboCadastrarActionPerformed. Neste catch faça alguma coisa que jogue de forma gritante a exceção na tela.
Se em algum lugar nas profundezas do programa estiver dando NullPointerException, ClassCastException, StackOverflowError ou qualquer outra coisa que fará o seu programa ficar maluco, isso vai aparecer de forma bem visível para que você possa tratar.
EDIT:
Seu código: /** Creates new form CadastroContato */
public CadastroContato( java.awt.Frame parent, boolean modal ) {
super( parent, modal );
initComponents();
pessoa = new Pessoa();
}
Ele cria uma pessoa com endereço nulo. Daí pessoa.getEndereco().getLogradouro() vai dar NullPointerException!
EDIT 2: Se esse pessoa = new Pessoa() for invocado antes do initComponents(), ajuda?
vou dar uma olhada aqui, mas o new Pessoa, no contrutor do Pessoa faz um new Endereco, então esse pode descartar, dps posto aqui se consegui algo, abraço, valeu
ja sei ql era o problema, haviam 2 construtores e os dois com o initcomponents(), daí quando usava o construtor que editava a pessoa, ele fazia o metodos 2 vezes e bugava
valeu ai