Não entendi de onde vc quer fechar o JInternalFrame.
No próprio JInternalFrame?
JFrame que chamou ele?
Já que eu não entendi exatamente o que você queria fiz um exemplinho…
/* * by black_fire * Rodrigo G. Tavares de Souza * * Nome do arquivo: CloseJInternalFrame.java * */importjava.awt.BorderLayout;importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjavax.swing.JButton;importjavax.swing.JDesktopPane;importjavax.swing.JFrame;importjavax.swing.JInternalFrame;importjavax.swing.JPanel;importjavax.swing.event.InternalFrameEvent;importjavax.swing.event.InternalFrameListener;publicclassCloseJInternalFrameextendsJFrame{privatevoidexibirFomulario(ActionEventevt){if(frameInterno==null){// inicia frameframeInterno=newFrameInterno(this);// adiciona o frame no DesktopPanedesktop.add(frameInterno);}// Exibe o frameframeInterno.setVisible(true);}// este método está declrado como público para poder ser executado por outra classepublicvoidfecharFormulario(ActionEventevt){// verifica se há uma referencia válida para o objetoif(frameInterno!=null){// libera o objetoframeInterno.dispose();frameInterno=null;}}// Adiciona os eventos da aplicaçãoprivatevoidaddEvents(){// Adiciona o evento de close da janelasetDefaultCloseOperation(DISPOSE_ON_CLOSE);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});// botão exibirexibir.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevt){exibirFomulario(evt);}});// botão exibirfecharF.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevt){fecharFormulario(evt);}});}privatevoidiniciaCloseJInternalFrame(){// Atribui um layout managerBorderLayoutb=newBorderLayout();// Atribui o o layout no formgetContentPane().setLayout(b);// Inicializa os componentestop=newJPanel();exibir=newJButton("Mostra Frame");fecharF=newJButton("Fechar Fame");desktop=newJDesktopPane();// Adiciona os componentes no framegetContentPane().add(top,BorderLayout.NORTH);FlowLayoutf=newFlowLayout(FlowLayout.LEFT);top.setLayout(f);top.add(exibir);top.add(fecharF);getContentPane().add(desktop);//chama metodo para adicionar eventos...addEvents();setSize(600,440);show();}publicCloseJInternalFrame(){iniciaCloseJInternalFrame();}publicstaticvoidmain(String[]args){newCloseJInternalFrame();}privateJPaneltop;privateJButtonexibir;privateJButtonfecharF;privateJDesktopPanedesktop;privateFrameInternoframeInterno;}// Frame interno...// estamos implementando InternalFrameListener para que // quando o form for fechado pelo "X" possamos liberar o objetoclassFrameInternoextendsJInternalFrameimplementsInternalFrameListener{privatevoidclickFecharI(ActionEventevt){// chama o evento do form pai para fechar o forumlariocloseJInternalFrame.fecharFormulario(null);}// os eventos abaixo devem ser implementados devido// Interface InternalFrameListenerpublicvoidinternalFrameClosing(InternalFrameEvente){closeJInternalFrame.fecharFormulario(null);}publicvoidinternalFrameClosed(InternalFrameEvente){}publicvoidinternalFrameOpened(InternalFrameEvente){}publicvoidinternalFrameIconified(InternalFrameEvente){}publicvoidinternalFrameDeiconified(InternalFrameEvente){}publicvoidinternalFrameActivated(InternalFrameEvente){}publicvoidinternalFrameDeactivated(InternalFrameEvente){}// **********************************************************privatevoidaddEvents(){addInternalFrameListener(this);fecharI.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevt){clickFecharI(evt);}});}privatevoidiniciaFrameInterno(){fecharI=newJButton("Fechar");getContentPane().add(fecharI);setClosable(true);setSize(300,200);// Adciona eventos para este formuláriosaddEvents();}publicFrameInterno(CloseJInternalFramecloseJInternalFrame){this.closeJInternalFrame=closeJInternalFrame;iniciaFrameInterno();}privateJButtonfecharI;// referencia do frame paiprivateCloseJInternalFramecloseJInternalFrame;}