Queria instancia um jinternalframe so uma vez

1 resposta
P

Bom dia,

eu estou usando o seguinte codigo para abrir um jinternalframe uma unica vez e nao ta funcionando(nao abre a janela).

class formprincipal

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

if (municipio == null) {

Municipio municipio = new Municipio();

Desktop.add(municipio);

}

municipio.setVisible(true);

try {

municipio.setSelected(true);

} catch (java.beans.PropertyVetoException e) {}

}

private Municipio municio;

quando eu tiro esse codigo e ponho:

Municipio municipio = new Municipio();

municipio.setVisible(true);

Desktop.add(municipio);

funciona normal, mas se eu fica clicando no menu ele vai abrir varias vezes o mesmo form…

T+
perell

1 Resposta

brlima

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.

Abraços!

Criado 20 de maio de 2004
Ultima resposta 20 de mai. de 2004
Respostas 1
Participantes 2