JFrame abrir JInternalFrame

Bom galera, o meu problema é o seguinte, eu tenho um formulário principal que é um JFrame, e tenho outros formulários que não são principais que são JInternalFrame:
dai vem o meu problema: Como eu faço de uma forma bem simples para abrir um JInternalFrame dentro de um JFrame. Valeu pessoal, abraços…

Cara, nunca tentei abrir um JInternalFrame em um JFrame mas ja abri em uma JDesktopPane.

Para abrir no JDesktopPane, vc deve adicionar o JInternalFrame no JDesktopPane:

JDesktopPane desktop = new JDesktopPane,();
JInternalFrame internalFrame = new JInternalFrame();
desktop.add(internalFrame);

Depos vc coloca o InternalFrame visivel:

internalFrame.setVisible(true);

Com o JFrame deve ser bem aprecido.

Espero ter ajudado.

Valeu.

1 curtida

Não consegui, você não tem um exemplo, abraço.

Boa tarde galera…

A parte do JInternalFrame ser acessado de um DesktopPane ta OK…

criei um JFrame com o JDesktop dentro.

Eu tenho um Jpanel que contem um formulário para ser preenchido.

Estou tentando colocar o Panel dentro o Internal Frame e este dentro do desktop panel… segue o código…

//aperte o botão e o jInternalFrame aparece com o formulário dentro private void abreConsumidores(java.awt.event.ActionEvent evt) { JInternalFrame jif = new JInternalFrame(); //Consumidores c = new Consumidores(); // Consumidores é a classe com meu formulário jif.add(new Consumidores()); Desktop.add("consumidores", jif); // Desktop é o nome que dei ao desktoppanel jif.setVisible(true); }

Eu estou alterando um projeto que fiz utilizando jInternalFrame mas percebi, agora que está concluído, que o código ficou muito porco… tem coisa demais em um só arquivo e posso deixar isso mais limpo e fácil de entender se fizer em camadas (coisa que eu não tinha visto nada ainda) [muito aspira ainda…]

agradeço a ajuda! :smiley:

Nao sei se vai te ajudar, mas eu faço assim:

Frame frame = new JFrame();
		ViewFiltrarGuiasGSB vfg = new ViewFiltrarGuiasGSB(); //extende internal frame
		vfg.setVisible(true);
		vfg.setResizable(false);
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.getContentPane().add(vfg);
		frame.setResizable(true);
		frame.setVisible(true);

Deixa eu ver se entendi… nesse código… vc coloca o InternalFrame dentro de um Frame…

Desse jeito da pra utilizar com o desktoppane, ou vai acabar abrindo um outro frame mesmo??

Vou tentar criar um frame e adicionar o internal nele… logo mais posto um resultado…

To pensando seriamente em trocar desktop + internal frame por varios frames soltos, até pq são poucas janelas…

mas gostaria de saber como faz pra fazer em projetos futuros…

Você teria que substituir o frame pelo seu frame principal.

Valeu a ajuda aí… eu tentei desse modo que você falou… mas não ficou muito legal…

mas com isso eu entendi o porque meu código estava dando errado…

quando coloquei o código como vc sugeriu para rodar… ele abriu uma nova janela… porém ela estava toda encolhida… ou seja, o size dela estava (0,0)

visto isso… utilizei um setSize(altura,largura) [ou seja lá qual é a ordem pq não to lembrando] com meus valores da janela e coloquei um setResizable(false) pq não faz sentido esticar um form… e funcionou certinho…

[code]//aperte o botão e o jInternalFrame aparece com o formulário dentro
private void abreConsumidores(java.awt.event.ActionEvent evt) {
JInternalFrame jif = new JInternalFrame();
//Consumidores c = new Consumidores(); // Consumidores é a classe com meu formulário
jif.add©;
jif.setSize(valor1,valor2); // Valor 1 e valor 2 eu inseri o tamanho do meu form…
jif.setResizable(false); // não vejo necessidade em modificar o tamanho de um form…
Desktop.add(“Consumidores”, jif); // Desktop é o nome que dei ao desktoppanel
jif.setVisible(true);
}

//deve funcionar lindamente… o meu funcionou…
[/code]

Eu defino o tamanho do meu internal frame no construtor dele. (Talvez tenha sido por isso que o teu deu errado no principio)

Mas se tá funcionando, tá beleza.

Quanto ao setResizable, tanto faz. O código que te mostrei como exempo é um método main dentro do proprio internal frame pra que eu nao precise inicializar a aplicação (que demora um bocado) sempre que quiser testar como tá ficando. Executo somente o internal frame, que é instântaneo.