Preciso abrir um JInternal Frame de dentro de outro JInternal Frame. Alguém tem alguma sugestão?
Tenho um JFrame Form onde tem um JDesktopPane. Dentro deste JDesktopPane, abro uma JInternalFrame onde faço consultas.
Quero selecionar uma linha de uma tabela e ao clicar no botão editar, preciso que seja aberta a tela de cadastro e os dados estejam inseridos nesta.
Tenho uns casos em que uma tela JInternalFrame que possue várias abas, numa das abas deve ser aberto uma tela idêntica a um JInternalFrame que já tenho rodando no sistema. Então eu faço isso, abro um JInternalFrame dentro de um JInternalFrame.
A forma de se fazer isso é simples, como o amigo já disse, crie um JDesktopPane dentro do seu primeiro JInternalFrame e abra seu outro JInternalFrame ali dentro.
Eu já fiz até com JPane invés de JDesktopPane, na verdade funciona, mas não fica tão bom.
Aos interessados, muito obrigado pela atenção e pela ajuda. Finalmente consegui fazer o que queria. Fica então, armazenado a solução para que eu e quem mais precisar possamos consultar.
No Formulário principal (onde tem o JDesktopPane), faça da seguinte forma:
public void listarClientes() {
if (frmListaClientes == null) {
frmListaClientes = new frameListarClientes(theDesktop);
getTheDesktop().add(frmListaClientes);
frmListaClientes.setVisible(true);
}else if(!frmListaClientes.isVisible()){
frmListaClientes = null;
listarClientes();
}
}
Onde:
Ou seja, quando for chamar o primeiro JInternalFrame passe como parâmetro o seu JDesktopPane.public javax.swing.JDesktopPane theDesktop;
No primeiro JInternalFrame, basta fazer um construtor que receba o parâmetro:
public frameListarClientes(JDesktopPane theDesktop) {
this.desktop = theDesktop;
initComponents();
}
E para chamar o segundo JInternalFrame faça da seguinte forma:
public void novoCliente() {
if (formCadastroCliente == null) {
formCadastroCliente = new formCadCliente();
desktop.add(formCadastroCliente);
formCadastroCliente.setVisible(true);
}else if(!formCadastroCliente.isVisible()){
formCadastroCliente = null;
novoCliente();
}
}
Onde “desktop” é o meu JDesktopPane do formulário principal que foi passado para este primeiro JInternalFrame como parâmetro.