Abrir um JInternal Frame de outro JInternal Frame

Boa noite pessoal,

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.

Aguardo contato.

Abraços.

Nunca tentei.

Mas creio que você tenha que colocar outro JDesktopPane dentro de um dos painéis do seu JInternalPane.

Eu faço isso direto.

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.

É simples! Tente ai, qq coisa é só gritar. :wink:

Pq ao inves de criar varios desktopPanes, vc nao mantém nos InternalFrames uma referência ao desktop do Frame principal?

Realmente foi isso que pensei em fazer, fabiocsi. Só que não consegui!

Você sabe como fazê-lo?

Agradeço a atenção.

Boa noite Pessoal…

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.

No mais… É isso! Abraços a todos.