Olá. Sou novato em Java e estou encontrando algumas dificuldades. Estou criando uma aplicação MDI usando Netbeans. Uso o método HIDE para fechar o formulário JInternalFrame, mas gostaria de saber como usar o método DISPOSE, pois quando o utilizo e chamo novamente o JInternalFrame ele não abre.
A segunda pergunta: Dentro do JInternalFrame criei um objeto Jtable. Criei o método carregarTabela que é acionado ao clicar em um item de menu. Até aí tudo bem, mas ao abrir novamente o JInternalFrame os dados da tabela aparecem duplicados cada vez que abre o Formulário.
Estou me sentindo perdido… Não é por falta de estudar, mas Java tem sido um grande desafio para mim. Desde já agradeço qualquer ajuda. Já pesquisei no Fórum, mas não encontrei nada parecido.
o método dispose literalmente destrói o objeto. então, se vc quer usar o mesmo objeto JFame ou JInternalFrame, vc terá q dar um novo new a ele.
o que vc poderia fazer p sanar essa questão é esconder ele usando o setvisible.
JInternalFramej=newJInternalFrame();j.setVisible(true);//exibe o framej.setVisible(false);//esconde o frame
agora, qto a tabela, tem como vc dar mais detalhes e postar o código p anaçisde?
abrçaos
ViniGodoy
Você está usando DefaultTableModel? Se está, o erro começou por aí… é melhor entender primeiro como o JTable funciona, senão vai ficar perdido mesmo. Esses links podem te ajudar:
Só uma dica: Nunca use o DefaultTableModel.
Ele torna o código mais confuso, mais ineficiente, mais sujeito a erros, menos encapsulado e com redundância de informação.
life4u
Olá. Estou usando setVisible(true) e setVisible(false) para abrir/fechar o JInternalFrame. O que ocorre é que ao abrir novamente o form os dados da JTable aparecem duplicados. Aí está o código que uso para carregar os dados na JTable: (obs: funciona. o problema é o que estou relatando acima.)
public void carregarTabela() {
try{rs=stmt.executeQuery("select nome_autor from autores");StringVNome_autor;//Setaasvariáveis...while(rs.next()){VNome_autor=rs.getString("nome_autor");//alinhaabaixocarregaosdadosparaaslinhasdoJTable...Incrível!!!((DefaultTableModel)tblAutores.getModel()).addRow(newObject[]{VNome_autor});booleantabelacarregada=true;}}catch(SQLExceptione){//trataoserrosdeSQLJOptionPane.showMessageDialog(this,"Erro comando SQL "+e.getMessage());}
}
ViniGodoy
Oi, por favor, use a tag code para formatar o código que você posta no guj. Se ainda não conhece esse recurso, leia esse artigo aqui: http://www.guj.com.br/posts/list/50115.java
Leia os links que eu postei para você ali em cima. É muito importante entender como funciona o TableModel para usar um JTable corretamente. E também é muito importante se livrar do DefaultTableModel.
Balena
pelo que entendi a carga da tabela está correta, não há erros, você só deve limpá-la quando for deixar de usar.
ViniGodoy
Bem observado, não há erros. Só codigo extremamente perigoso e dados redundantes, já que envolve downcasts e DefaultTableModel (sim, vou incomodar muito com isso, já que é realmente péssimo usa-lo).
Balena
Bem observado, não há erros. Só codigo extremamente perigoso e dados redundantes, já que envolve downcasts e DefaultTableModel (sim, vou incomodar muito com isso, já que é realmente péssimo usa-lo).
Então pode ser perigoso, no entanto é de fácil utilização pra quem está começando, não devemos colocar medo nas classes e importações que eles utilizam…
assim deixaram de aprender devemos dar dicas e incentivá-los a ler as documentações de classes, a buscar uma resposta e a tentar resolver seus problemas sozinhos…
life4u
Serei mais claro. O grande problema é que todas as vezes em que abro o meu JInternalFrame a tabela abre com os dados duplicados. Deu para entender?
Se na primeira vez em que abro o form mostra 10 registros, na segunda mostra 20, e assim por diante… Entenderam? Eu estou montando a tabela durante a abertura do Form.
Não sei mais o que faço. Li a Documentação da JTable sem muito sucesso.
Marky.Vasconcelos
Voce tem que pegar o model da JTable limpar e depois colocar os dados novos.
E realmente é recomendavel voce deixar de usar o DefaultTableModel.
Balena
Simplesmente Limpe a tabela toda vez que você abrir