Identificando qual JInternalFrame está aberto e carregar informações

Boa noite, estou com a seguinte dificuldade: Tenho duas telas distintas que fazem busca há uma mesma classe “Produto”, porém, o laço que eu fiz só identifica a janela Acerto de Estoque quando está por baixo e carrega as informações, mas quando vou fazer o processo na tela de Compra ele dá erro :confused:

public void mouseClicked(MouseEvent e) {
        if (telaMovimentoAcertoEstoque.isVisible() && e.getClickCount() == 2) {
              JOptionPane.showMessageDialog(null, "Acerto");
              Integer pkProduto = (Integer) tabelaConsulta.getValueAt(tabelaConsulta.getSelectedRow(), 0);
              telaMovimentoAcertoEstoque.consultarBD(pkProduto);
              dispose();

        } 
        else if(telaMovimentoCompra.isVisible() && e.getClickCount() == 2) {
            JOptionPane.showMessageDialog(null, "Compra");
            Integer pk = (Integer) tabelaConsulta.getValueAt(tabelaConsulta.getSelectedRow(), 0);
            telaMovimentoCompra.consultarBDProduto(pk);
            dispose();
          }
}

Se alguém tiver uma ideia, desde já agradeço!

é dificil ajudar sem testar, mas esse dispose() que vc esta usando ? é para fechar a sua JInternalFrame ? se for não seria melhor usar

telaMovimentoAcertoEstoque.setVisible(false);
telaMovimentoCompra.setVisible(false);

Boa sorte !!!

Boa noite Juliano, o dispose(); é para fechar a janela de Cadastro de Produto, eu chamo ela pelo campo de produto que tenho no JITF Compra e JITF Acerto Estoque, então quando eu clico duas vezes nela é carregado as informações nos campos correspondentes, pretendo fazer isso em duas telas diferentes mas, está dando conflito e apenas a primeira parte do laço está sendo executado:

if (telaMovimentoAcertoEstoque.isVisible() && e.getClickCount() == 2) {   
              JOptionPane.showMessageDialog(null, "Acerto");   
              Integer pkProduto = (Integer) tabelaConsulta.getValueAt(tabelaConsulta.getSelectedRow(), 0);   
              telaMovimentoAcertoEstoque.consultarBD(pkProduto);   
              dispose(); 

Tenho que encontrar uma forma de identificar o JIternaframe inicial que está chamando a tela de Produto para poder passar as informações…

qual erro que esta dando ? pode postar ?

acho que estou começando a entender o que voce quer, esse evento do mouse click fica na sua classe de produtos? e quando vc chama a classe de produtos vc tem que saber se vc esta chamando de telaMovimentoAcertoEstoque ou telaMovimentoCompra ?

Exatamente isso, está dando erro na primeira linha do método de persistência da classe Acerto de Estoque, ele deveria acessar esse método mas o que está na classe de Compra, por isso que preciso identificar qual classe está chamando a classe Produto.

 public void getPersistenciaComTela() {
        telaMovimentoAcertoEstoque.campoProduto.setValor(acertoEstoque.getProduto().getProdCodigo());
        telaMovimentoAcertoEstoque.campoDescricao.setText(acertoEstoque.getProduto().getProdDescricao());
        telaMovimentoAcertoEstoque.campoEstoqueDisponivel.setValor(acertoEstoque.getProduto().getProdQuantidade());
}

Fiz esse método para verificar quando chamo a tela Produto, ele está identificando a tela que chama, mas quando eu implemento no laço if do método mouseClicked() ele não identifica :confused:
Estranho…

public void verificaTela() {
        if (Principal.jdp.getSelectedFrame().getTitle().equals("Compra")) {
            JOptionPane.showMessageDialog(null, "Compra");
        } else if (Principal.jdp.getSelectedFrame().getTitle().equals("Acerto de Estoque")) {
            JOptionPane.showMessageDialog(null, "Acerto");
        }
}

entao vc tem que fazer o seguinte, vc nao tem que indentificar o JInteranalFrame que esta chamando Produdos mas sim a classe que esta chamando.
faça o seguinte, suponha que vc tem 3 classes
1- Produto
2 - AcertoEstoque
3 - MovimentoCompra

Na classe produtos vc cria no escopo da classe os seguintes atributos

//suponhamos que as suas classes tem esses nomes.
AcertoEstoque acertoEstoque ; 
MovimentoCompra movimentoCompra;

Agora ainda em produtos vc cria os metodos set para as classes

public void setAcertoEstoque(AcertoEstoque acertoEstoque){
    this.acertoEstoque = acertoEstoque;
}
public void setMovimentoCompra(MovimentoCompra movimentoCompra){
    this.movimentoCompra= movimentoCompra;
}

//agora na sua classe a suas classe MovimentoCompra e AcertoEstoque vc coloca o seguinte para chamar a classe Produtos e abri-la

// em AcertoEstoque
Produtos produtos = new Produtos();
produtos.setAcertoEstoque(this);
produtos.setVisible(true)

//em MovimentoCompra
Produtos produtos = new Produtos();
produtos.setMovimentoCompra(this);
produtos.setVisible(true)

agora na sua classe Produtos no evento mouseClicked faça o seguinte

public void mouseClicked(MouseEvent e) {  
        if (acertoEstoque!=null && e.getClickCount() == 2) {  // detalhe nessa linha
              JOptionPane.showMessageDialog(null, "Acerto");  
              Integer pkProduto = (Integer) tabelaConsulta.getValueAt(tabelaConsulta.getSelectedRow(), 0);  
              telaMovimentoAcertoEstoque.consultarBD(pkProduto);  
              dispose();  
  
        }   
        else if(movimentoCompra != null && e.getClickCount() == 2) {  // detalhe nessa linha
            JOptionPane.showMessageDialog(null, "Compra");  
            Integer pk = (Integer) tabelaConsulta.getValueAt(tabelaConsulta.getSelectedRow(), 0);  
            telaMovimentoCompra.consultarBDProduto(pk);  
            dispose();  
          }  
}  

Bom espero que de certo, e que seja isso que vc precise, fiz aqui correndo e nao sei se errei algo pois nao usei editor nenhum parar escrever, caso esteja dando algum erro me avise.
T+

Alterei o código, mas continua com o mesmo problema, ele não consegue identificar a tela e só pega um dos "telaMovimento(…).consultarBD(pKProduto), por isso dá o erro!

public void mouseClicked(MouseEvent e) {
        Integer pkProduto = (Integer) tabelaConsulta.getValueAt(tabelaConsulta.getSelectedRow(), 0);
        if (e.getClickCount() == 2) {
            if (telaMovimentoCompra.isVisible()) {
                   telaMovimentoCompra.consultarBD(pkProduto);
               } else {
                     telaMovimentoAcertoEstoque.consultarBD(pkProduto);
                 }
        dispose();
        }

Valeu Juliano, vou fazer as alterações!
Até mais!

se nao estiver dando certo pode postar ai que estarei online ate mais tarde !!!
T+

As janelas Compra e Acerto de Estoque não estão abrindo parece que o sistema entrou em loop.

21/02/2012
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
        at javax.swing.text.AbstractDocument.<init>(AbstractDocument.java:105)
        at javax.swing.text.AbstractDocument.<init>(AbstractDocument.java:92)
        at javax.swing.text.PlainDocument.<init>(PlainDocument.java:74)
        at javax.swing.text.PlainDocument.<init>(PlainDocument.java:64)
        at javax.swing.JTextField.createDefaultModel(JTextField.java:347)
        at javax.swing.JTextField.<init>(JTextField.java:220)
        at javax.swing.JTextField.<init>(JTextField.java:179)
        at Componentes.MeuJTextField.<init>(MeuJTextField.java:20)
        at Componentes.MeuCampoCodigo.<init>(MeuCampoCodigo.java:14)
        at Cadastros.Telas.TelaCadastroProduto.<init>(TelaCadastroProduto.java:52)        at Cadastros.Telas.TelaCadastroProduto.<init>(TelaCadastroProduto.java:52)

        at Movimentos.Telas.TelaMovimentoAcertoEstoque.<init>(TelaMovimentoAcertoEstoque.java:34)
        at Cadastros.Telas.TelaCadastroProduto.<init>(TelaCadastroProduto.java:87)
        at Movimentos.Telas.TelaMovimentoAcertoEstoque.<init>(TelaMovimentoAcertoEstoque.java:34)
        at Cadastros.Telas.TelaCadastroProduto.<init>(TelaCadastroProduto.java:87)        at Cadastros.Telas.TelaCadastroProduto.<init>(TelaCadastroProduto.java:87)
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
        at sun.java2d.SunGraphics2D.getClipBounds(SunGraphics2D.java:1715)
        at javax.swing.JComponent.paint(JComponent.java:978)
        at javax.swing.JComponent.paintChildren(JComponent.java:862)
        at javax.swing.JComponent.paint(JComponent.java:1038)
        at javax.swing.JLayeredPane.paint(JLayeredPane.java:567)
        at javax.swing.JComponent.paintChildren(JComponent.java:862)
        at javax.swing.JComponent.paint(JComponent.java:1038)
        at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
        at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1479)
        at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1410)
        at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
        at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
        at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
        at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
        at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÍDO COM SUCESSO (tempo total: 2 minutos 2 segundos)

confirme com atenção se vc seguiu todos os passos, de uma analizada no codigo que eu editei fiz umas correções.

como vc abre essas janelas ? clicando em algum botao ?

Utilizo o JMenubar para abrir as janelas. Realmente eu criei os objetos errados, agora as janelas estão abrindo, mas o método mouseClicked() não está carregando os dados. Da forma que está ele não chega a nem chamar o JOptionPane, agora se tirar esse comando: (telaMovimentoAcertoEstoque != null) da linha if (telaMovimentoAcertoEstoque != null && e.getClickCount() == 2) { ele chega até o JOptionPane e dá erro na linha:

telaMovimentoAcertoEstoque.consultarBD(pkProduto);     

provavelmente vc nao esta passando a classe, verifique se vc criou o set na classe produto

// eu coloquei acertoEstoque mas no seu caso seria telaMovimentoAcertoEstoque
public void setAcertoEstoque(AcertoEstoque acertoEstoque){  
    this.acertoEstoque = acertoEstoque;  
} 

se vc criou verifique se voce esta passando a classe antes de abrir, por exemplo em AcertoEstoque tem que colocar isso antes de abrir a tela Produtos, colocar isso no evento do botao que ira abrir produtos.

Produtos produtos = new Produtos();  
produtos.setAcertoEstoque(this);   // esta linha que manda a classe AcertoEstoque para Produtos, se vc nao colocar o valor vai ser null e nao vai abrir
produtos.setVisible(true)  

Já olhei o código mas não sei o que pode estar causando o erro, mesmo assim obrigado pela ajuda!
Valeu

Blz Juliano, você havia perguntado como eu chamo a tela e eu disse errado, eu não chamo pelo menu e sim por um JTextField em que faz uma verificação no campo de forma que, se ele estiver vazio a tela de produto é chamada automaticamente, pode ser que seja nessa parte que esteja o erro.

.