Olá, estou tentando encontrar uma resposta para solucionar o meu problema! Através do GUJ consegui montar uma Splash Screen (Tela de boa-vinda). Agora eu estou querendo adicionar nessa tela uma barra de progresso que vá contabilizando uma porcentagem até a abertura da tela de login do meu sistema. Será que alguém pode me ajudar?
Desde já agradeço!
Aqui vai um exemplo utilizando a nova classe do JSE 6, SplashScreen.
privateclassCarregaTaskextendsTask{SplashScreensplash=null;publicCarregaTask(Applicationapp,Viewview){super(app);this.view=view;}@OverrideprotectedObjectdoInBackground(){splash=SplashScreen.getSplashScreen();try{setSplashScreenProcess(20,splash,"Inicializando...");//carregaalgosetSplashScreenProcess(50,splash,"Inicializando...");//carregaalgosetSplashScreenProcess(90,splash,"Inicializando...");//carregaalgosetSplashScreenProcess(100,splash,"Inicializando...");//prontoparaateladelogin}catch(UnsatisfiedLinkErrore){e.printStackTrace();JOptionPane.showMessageDialog(null,"Não foi possível encontrar "+"a dll mp2032 da impressora bematech. ");System.exit(0);}catch(FileNotFoundExceptione){e.printStackTrace();JOptionPane.showMessageDialog(null,"Arquivo de configuração dos "+"relatórios não encontrado. "+e.getMessage());}catch(Exceptione){e.printStackTrace();JOptionPane.showMessageDialog(null,"Problemas com a conexão "+"com o banco de dados. Erro ao iniciar a fabrica de DAOs. "+e.getMessage());System.exit(0);}returnnull;}@Overrideprotectedvoidsucceeded(Objectarg0){splash.close();navigator.getLoginPresenter().openView();}@Overrideprotectedvoidfinished(){setMessage("Terminado.");}}protectedvoidsetSplashScreenProcess(doublep,SplashScreensplashScreen,Stringstr){if(splashScreen!=null){Dimensionsize=splashScreen.getSize();Graphicsg=splashScreen.createGraphics();FontMetricsfm=g.getFontMetrics();intsWidth=fm.stringWidth(str);intsHeight=fm.getHeight();intx=(size.width-sWidth)/2;inty=(int)((size.height*0.90));g.setColor(Color.ORANGE);g.fillRect(x-(sWidth/2),y-sHeight,((int)(sWidth*2*(p/100))),sHeight+2);if(sWidth<size.width&&2*sHeight<size.height){g.setColor(Color.blue);g.drawString(str,(size.width-sWidth)/2,y);}splashScreen.update();}}
faelcavalcanti
utilize o padrão observer para isto.
Diego-Java
Fala Vinícius! Eu hoje tentei implementar esse exemplo, mas não estou conseguindo. Esta classe pertence qual pacote? Eu observei que neste exemplo não tem nenhum import e dá erro de sintaxe pois existem vários atributos que, ou não foram declarados ou pertence a uma classe que não foi criada ou é porque não foi o import da classe usada! Eu tentei importar alguns pacotes, mas não resolveu o problema! Se puder ver depois é só escrever! Esse exemplo irá gerar o que eu havia dito acima?
Abraços!
vinicius_jssouza
Vamos ver se consigo explicar:
No exemplo, estou utilizando o Swing Application Framework e sua classe Task, que é uma subclasse do SwingWorker…ou seja, estou abrindo uma thread separada para realizar a animação do splash screen enquanto a thread principal carrega os dados do aplicativo (em factory do jpa, arquivos de relatórios, entre outros…)
Esqueça os parâmetros Application e View… não interessam neste caso…
O método setSplashScreen atualiza a barra de progresso do splash screen, desenhando um retângulo colorido e com um texto (a string passada como parâmetro).