Problema com JFrames

7 respostas
Zeed01

Boa noite…

Estou desenvolvendo uma aplicação desktop para fins de estudo… utilizando swing.

Criei uma tela para cadastro de usuarios que esta terminada e funcionando.

Agora gostaria de criar uma tela principal com menu que iria chamar as outras telas e gostaria que estas telas ficassem como filhas da principal… ou seja: se fechar, minimizar ou mover a principal leva as filhas junto… como acontece na maioria dos aplicativos desktop.

Outro problema é que gostaria que a tela principal aparecesse maximizada e as filhas aparecem “dentro” da principal…

Espero que tenha conseguido explicar direito.

De qualquer forma obrigado.

[]s.

7 Respostas

marciosantri

Acho que você está procurando por aplicações MDI.
Procure por JInternalFrame.

F

vc está utilzando qual ide?

F

altere a propriedade do seus jframes filhos “defultCloseOperation” de EXIT_ON_CLOSE para HIDE.

Zeed01

fpaimlima:
Estou usando o NetBeans 5.5.

Eu havia criado uma tela para cadastro de usuário pelo Wizard do NB, e ele criou como extends de JFrame. Esta classe esta funcionando.

Então eu pensei em criar a tela principal… usei a opção de criar uma aplicação MDI, o NB criou uma classe extendendo JFrame tambem com um JDesktopPane dentro.

Bom imaginei que poderia adicionar a minha tela de cadastro que esta funcionando no desktopPane… usei o comando:
desktopPane.add(minhaTela);

só que quando faço isso da o erro:

java.lang.IllegalArgumentException: adding a window to a container

Bom… como teste, troquei na mão o extends da minha tela de cadastro de usuario de:

public class CadastroUsuario extends javax.swing.JFrame {

para:

public class CadastroUsuario extends javax.swing.JFrame {

e aí tudo funciona… inclusive com a tela sendo criada como filha da tela principal… o único inconveniente é que no JInternalFrame não aparecem os botões Maximizar, Minimizar e Fechar.

De qualquer forma, achei meio gambiarra ter que trocar o extends na mão, mas não encontrei nas opções do NB uma que crie uma tela extendendo JInternalFrame.

Se alguém tiver a receita certa pra esse problema agradeço muito.

Abraços a todos !

marciosantri

Vou te dar um exemplo meio que tutorial. Vamos lá.

  • Arquivo / Novo Projeto
  • Escolha “Geral” e “Aplicação Java”
  • Dê um nome, escolha um local para aplicação e finalize.
  • Na janela Projetos, clique com o botão direito em cima da sua aplicação.
  • Escolha “Novo” e “Formulário JFrame”
  • Dê um nome à classe e clique em finalizar.
  • Dentro do JFrame que vc criou, jogue um JDesktopPane. Faça-o utilizar toda a àrea.
  • No JFrame, adicione um JMenuBar. Dentro dele coloque um JMenu (se não vier como padrão).
  • Na janela Projetos, clique com o botão direito em cima da sua aplicação.
  • Escolha “Novo” e “Arquivo/Pastas”
  • Escolha “Formulários GUI” e “Formulário JInternal Frame”
  • Marque as propriedades “closeable”, “iconifiable”, “maximizable” e “resizable” para que a janela filha possa fazer o que vc requisitou na mensagem acima.
  • Coloque uns componentes dentro do JInternalFrame só para exemplo.
  • Dentro do método main do projeto, coloque algo do tipo

java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new NovoJFrame().setVisible(true); } });

  • No JFrame, adicione o JMenuItem dentro do JMenu que vc criou.
  • No actionPerformed do JMenuItem, coloque algo do tipo

NovoJInternalFrame exemplo = new NovoJInternalFrame(); this.jDesktopPane1.add(exemplo); exemplo.setVisible(true);

É mais ou menos isso. Os nomes ficaram horríveis devido à pressa mas acho q vc vai entender.

Zeed01

marciosantri:

Sensacional !

Sem desmerecedor os outros colegas que sempre colaboraram ajudando a esclarecer as inúmeras dúvidas que já postei no forum, mas esta foi, sem dúvida, a resposta mas objetiva, direta e correta que ja recebi !

Sem aquelas frases cortadas, as explicações pela metade !

E não estou falando isso porque você mandou o código… mesmo porque eu não consegui compilá-lo.
Eu apenas peguei esse passo a passo e executei !
Em quinze minutos ja tinha montado a minha antiga tela de cadastro quer era um JFrame no novo JInternalFrame… inclusive com todas as funcionalidades !

Muito obrigado mesmo… como eu faço pra te dar uma estrelinha ?

Bom… aproveitando, como disse eu não consegui compilar seu projeto… o NB esta dando essa mensagem:

javac: invalid target release: 1.6

Você esta usando Java 6 ? É que eu estou com o 5.

Sabe porque isso aconteceu ?

Um abraço.

marciosantri

Sim, estou utilizando o Java 6. Deve ser por isso mesmo.

Criado 14 de junho de 2007
Ultima resposta 15 de jun. de 2007
Respostas 7
Participantes 3