Add JInternalFrame em um JDesktopPane

Estou fazendo um sistema com NetBeans para cadastro de despesas…

Tenho um JFrame(TelaPrincipal) com um JDesktopPane(Desktop) e um menu.
Nesse menu tenho a opção de cadastrar uma despesa, na qual abre um JInternalFrame(TelaDespesas) no JDesktopPane(Desktop) na JFrame(TelaPrincipal) como na imagem abaixo…

private void menuItemDespesasActionPerformed(java.awt.event.ActionEvent evt) {

    TelaDespesas td = new TelaDespesas();
    this.Desktop.add(td);
    td.setVisible(true);
}

Abre normalmente, ai dentro da tela de despesas JInternalFrame(TelaDespesas) tem um menu com a opção de abrir uma nova tela, um JInternalFrame(TelaDespesasPeriodo). Mas quando clico no menu, não consigo fazer a JInternalFrame(TelaDespesasPeriodo) abrir no JDesktopPane(Desktop) na JFrame(TelaPrincipal).

private void menuItemDespesasPeriodoActionPerformed(java.awt.event.ActionEvent evt) {

    try {
        TelaDespesasPeriodo tdp = new TelaDespesasPeriodo();
        TelaPrincipal tp = new TelaPrincipal();
        tp.Desktop.add(tdp);
        tdp.setVisible(true);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, e);
    }
}

Não sei como resolver, quem puder me ajudar agradeço muito…

Fala Luan!
Seguinte vamos pontuar algumas coisas primeiro:
1 - no metodo que você passo, Não é necessário instanciar novamente a sua principal, comentei a frente da linha, na verdade você deve usar apenas this.desktop.add(tdp);

try {
TelaDespesasPeriodo tdp = new TelaDespesasPeriodo(this);
TelaPrincipal tp = new TelaPrincipal(); // Não é necessario instanciar novamente a sua principal
tp.Desktop.add(tdp);
tdp.setVisible(true);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, e);
}

2- Para resolver o seu problema a sua classe:

TelaDespesasPeriodo tdp = new TelaDespesasPeriodo(); terá que receber um objeto do tipo sua tela principal e la na tela que você abriu você chama a instancia da principal e você chama um método que abre a nova JInternalFrame.

1 curtida

Obrigado Tiago, consegui!