desktop.setVisible(true);
getContentPane().add(desktop);
É isso mesmo q eu tô vendo, vc tá dando um setVisible direto no desktop, e antes dele ir para o ContentPane e não na sua classe q extende o jframe???
E a sua internal frame não será um outro item de consulta,cadastro ou algo assim?É bem melhor deixar ela com uma referência a sua classeprincipal, assim: SuaClasseInternal extends JInternalFrame{
JMenuTest jmt;
public SuaClasseInternal(JMenuTest jmt){
super("Minha classe");
this.jmt=jmt
//iniciarComponentes e blablabal
}
}
Na sua classe principal, crie uma variável de instância:
e trabalhe ela assim:
[code]
private void exibirSuaClasseInternal (ActionEvent evt) {
if (iframe== null) {
// inicia frame
iframe= new SuaClasseInternal (this);
// adiciona o frame no DesktopPane
desktop.add(iframe);
}
// Exibe o frame
iframe.setVisible(true);
}
// este método está declarado como público para poder ser executado por outra classe
public void fecharSuaClasseInternal (ActionEvent evt) {
// verifica se há uma referencia válida para o objeto
if (iframe!= null) {
// libera o objeto
iframe.dispose();
iframe= null;
}
} [/code]
Nada de iframe.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); , é só por em JIF um setClosable, por exemplo:
public JIF(JMenuTest jmt){
super("Cadastro");
this.jmt = jmt;
JPanel jp = new JPanel();
jp.setBorder( new TitledBorder("Cadastro de Pacientes"));
JLabel jl = new JLabel("Demonstração");
jp.add(jl);
getContentPane().add(jp);
setClosable(true);
setSize(600,400);
}
e no sua classe tratadora(a handler) não se esqueça de um setOpaque: