JDialog passando valor para outro JDialog?

2 respostas
fernandopaiva

Salve galera

Eu tenho 2 JDialogs, o JDialog1 e o JDialog2…O JDialog1 abre o JDialog2, e no JD2 eu tenho uma table que envia informações para o JD1…Bem, seguindo umas dicas que andei lendo, inclusive uma do Vini que gostei muito e estou tentando por em pratica, cheguei a essa maneira.

// esse é o JD1 que invoca JD2 
    public void setValorGridConsultaTProduto(int value) throws SQLException{
            if (value > 0){
                System.out.println("o valor é: " + value); //aqui eu consigo imprimir o valor vindo do JD2, ou seja, ele ta mandando.
                codigoTProduto.setValue(value);
                //System.out.println("o valor é: " + value);
                String sql = String.format("SELECT * FROM tipoproduto WHERE codigo = %d",
                                          value);
                con2.conectaBD();
                con2.executaSQL(sql);
                con2.rs.next();
                codigoTProduto.setText(con2.rs.getString("codigo"));
                nomeTProduto.setText(con2.rs.getString("nomeproduto"));
            }else{
                JOptionPane.showMessageDialog(null, "O valor do codigo e: "+value);
            }        
    }



//Agora esse é o JD2 que envia o valor para o JD1 e depois se fecha.

public int getValorColunaTabela(){ //pega o valor da coluna da tabela
        //retorna o valor da coluna
        String valorColuna = (String) tabelaResultados.getModel().getValueAt(tabelaResultados.getSelectedRow(),0);
        return Integer.parseInt(valorColuna);
    }

public void getValueGridConsulta() throws SQLException{
        //pega valor do grid e manda para o cadastro JD1
        try {
            CadastroTipoProduto cadastro = new CadastroTipoProduto(null, true); //instancia o cadastro q é o JD1
            cadastro.setValorGridConsultaTProduto(getValorColunaTabela()); //manda o valor da coluna para JD1
            this.dispose(); //fecha JD2
        } catch (ParseException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }

Bem galera, isso funciona em partes, pq no System.out eu consigo imprimir o valor vindo do JD2 e fazer toda a consulta sql com o valor vindo. Porém quando mando preencher os campos do JD1 com textfield.settext, não funciona.
Tem que dar algum revalidate() ou algo assim ??? Eu ja tentei dar um revalidate no panel que esta os controles do JD1 mas, ainda naum tive resultados.

obrigado.

2 Respostas

fernandopaiva

Lendo mais um pouco a apostila da caelum fj11 cap4, percebi exatamente que o new cria varias copias do msm objeto, e naum e o msm objeto na memoria, entaum percebi que mandando o jd1 que preciso ele iria criar uma copia do msm objeto e fazer o q quero, porem ainda naum tive resultados pq a variavel jd1 em jd2 perde seu valor,o q ainda nao sei o pq.

vejam:

//metodo que manda jd1 para jd2

public void mandaJD1ParaJD2(){
     JDialog jd2 = new JD2(null, true);
     jd2.setJD1(this); //aqui eu mando jd1 para jd2
     jd2.setVisible(true);
}

//jd2 recebe jd1
JDialog jd1;

public void setJD1(JDialog jd1){
    this.jd1 = jd1;
    if(this.jd1 == jd1){
       System.out.println("iguais"); //aqui eu tenho o retorno de que sao iguais.
    }
}

public JDialog getJD1(){
   return this.jd1; //retorna null
}

public void setaTextoEmJD1(){ //isso e o que eu queria fazer, mas a variavel jd1 que refere ao objeto jd1 perde o valor, fica null....pq acontece isso ???
    getJD1.getComponent(0).getName();
    //this.jd1.textfield.settext("texto");
}

Se meu raciocinio estiver correto, e vcs tiverem uma solução eu agradeço…obrigado.

fernandopaiva

opa Galera…Consegui fazer.

bem, nao sei se e essa a melhor maneira de se fazer, mas foi a que resolveu meu problema…rs !

vamus la.

//jd1 chama jd2 passando ele msm
JD2 jd2 = new JD2(null, true); //instancia de jd2
jd2.setDialog(this){} //aqui eu mando jd1 para jd2

public void recebeValorJD2(int value){}

//jd2 aqui o jdialog de consulta
JD1 jd1;
public void setDialog(JD1 jd1){
    this.jd1 = jd1
}

public void mandaValorParaJD1(){
    this.jd1.recebeValorJD2(valor);
    //faz td o que preciso
}

bem, essa foi a maneira que eu encontrei pra fazer o que eu preciso…

Criado 29 de outubro de 2010
Ultima resposta 1 de nov. de 2010
Respostas 2
Participantes 1