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
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
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.