Singleton em JInternalFrame: Como usar?

Eu de novo com duvidas em JInternalFrame !!! Hehehe !!!

Para que um JInternalFrame abra uma única vez me disseram que deveria usar Singleton. Mas o que é isso e como posso usar isso ???

Se possivel me mandem um exemplo. Desde ja agradeço !!!

:smiley:

Implementação…

public class MinhaClasse {

    private static MinhaClasse minhaClasse = null;

    private MinhaClasse() {
    }

    public static synchronized MinhaClasse getInstance() {
        if (minhaClasse == null) {
            minhaClasse = new MinhaClasse();
        }
        return minhaClasse;
    }

    public void testeSingleton() {
        System.out.println("Teste Singleton!");
    }

}

Para utilizar a instância:


minhaClasse.getInstance().testeSingleton();

Singleton eh um padrao que dita que haverá apenas uma instancia de determinado objeto em sua aplicacao.
Normalmente eh feito mais ou menos assim:

public class SingletonFrame extends JInternalFrame{

   private static final SingletonFrame INSTANCIA;
   
   //BLOCO DE CODIGO STATIC , SOH EH EXECUTADO UMA VEZ
   static{
      INSTANCIA = new SingletonFrame();
   }

   //CONSTRUTOR PRIVADO
   private SingletonFrame(){

   }
   
   public static SingletonFrame getInstance(){
      return INSTANCIA;
   }


}

Deste modo para acessar a instancia vc deve utilizar SingletonFrame.getInstance() e isto sempre ira retornar a mesma instancia…

note que o construtor padrao é privado , nao permite vc fazer em outro codigo new SingletonFrame()

Vc precisara adpatra os construtores para o seu caso mas acho q deu pra entender,…

qq coisa eh soh postar msg

Abraços

Uma vez eu fiz isso da seguinte maneira pegava a instancia q eu tinha do internalframe e testava pra ver se ela estava visivel dai se sim nao fazia nada se nao abria o internalframe. Veja na api, mas o método eu acho q é isVisible(); ( meio óbvio mas como faz tempo, confirme lá ). :slight_smile:

como eu posso pegar essa instancia ???

qnd vc vai abrir o internalframe no desktoppane vc tem q fazer

meuDesktopPane.add( meuIF );
e depois meuIF.show();

certo ?!

antes de fazer meuIF.show(); ou meuIF.setVisible( true );

if ( !meuIF.isVisible() )
meuIF.setVisible( true );