Verifica se ja existe uma instancia desse InternalFrame dentro do desktop. Acho que só por ai da pra controlar o que tem aberto.
JInternalFrame[] frames = getJDesktopPane1().getAllFrames();
int num = frames.length;
boolean b_existe = false;
for( int x=0; x<num; x++){
// Verifica se tem o mesmo Nome
if( frames[x].getName().equals(i.getName()) ){
/******************************************************************/
// Garante que o JFrame principal esteja com foco
setVisible(true);
// Garante que nao é um icone
try{
if( frames[x].isIcon() )
frames[x].setIcon(false);
}catch( PropertyVetoException pe ){
showMessageError(false, "Erro pe : " + pe.toString(), this);
}
// Mostra o frame corretamente
frames[x].setVisible(true);
frames[x].moveToFront();
getJDesktopPane1().getDesktopManager().activateFrame(frames[x]);
b_existe = true;
}
}
Esse método ai pega todos os frames do desktop e verifica se o que vc quer ja nao esta aberto, tudo pelo setName() getName() do internalframe. Chama isso antes de adicionar ele no desktop, e se existir, nem adiciona, pq o método ja exibe ele, chamando ele na frente de todos.