Vous êtes sur la page 1sur 4

Temos apenas 5 propriedades, que so: view plaincopy to clipboardprint?

// Mensagem a ser mostrada junto com a imagem private final String message = "Splash Screen"; // Imagem que ira aparecer no Splash private final String imgName = "splash_guj.jpg"; Image splashImage; Toolkit toolkit; private static Splash splash; // Mensagem a ser mostrada junto com a imagem private final String message = "Splash Screen"; // Imagem que ira aparecer no Splash private final String imgName = "splash_guj.jpg"; Image splashImage; Toolkit toolkit; private static Splash splash; Note que temos uma propriedade chamada da prpria classe Splash, que utilizada par a garantir que apenas uma instncia estar na memria por ClassLoader(Singleton). O mto do que executa o trabalho grosso o initSplash, que mostrado abaixo: view plaincopy to clipboardprint? private void initSplash() { // Carrega a imagem na memoria MediaTracker media = new MediaTracker(this); splashImage = toolkit.getImage(imgName); if (splashImage != null) { media.addImage(splashImage, 0); try { media.waitForID(0); } catch (InterruptedException ie) {} } // Configura o tamanho do splash e a posicao na tela setSize(splashImage.getWidth(this), splashImage.getHeight(this)); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension size = getSize(); if (size.width > screenSize.width) size.width = screenSize.width; if (size.height > screenSize.height) size.height = screenSize.height; setLocation((screenSize.width - size.width) / 2, (screenSize.height - size.h eight) / 2); setVisible(true); } private void initSplash() { // Carrega a imagem na memoria MediaTracker media = new MediaTracker(this); splashImage = toolkit.getImage(imgName); if (splashImage != null) { media.addImage(splashImage, 0);

try { media.waitForID(0); } catch (InterruptedException ie) {} } // Configura o tamanho do splash e a posicao na tela setSize(splashImage.getWidth(this), splashImage.getHeight(this)); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension size = getSize(); if (size.width > screenSize.width) size.width = screenSize.width; if (size.height > screenSize.height) size.height = screenSize.height; setLocation((screenSize.width - size.width) / 2, (screenSize.height - si ze.height) / 2); setVisible(true); } Para desenhar a imagem na tela precisamos implementar o mtodo paint, como mostrad o abaixo: view plaincopy to clipboardprint? public void paint(Graphics g) { // Apenas desenha a nossa mensagem em cima da imagem g.drawImage(splashImage, 0, 0, getBackground(), this); g.setFont(new Font("Arial", Font.BOLD, 26)); g.drawString(message, (int)(splashImage.getWidth(this) / 2) - 80, 30); } public void paint(Graphics g) { // Apenas desenha a nossa mensagem em cima da imagem g.drawImage(splashImage, 0, 0, getBackground(), this); g.setFont(new Font("Arial", Font.BOLD, 26)); g.drawString(message, (int)(splashImage.getWidth(this) / 2) - 80, 30); } O cdigo fonte completo voc encontra no arquivo que acompanha este tutorial. Classe para simular o programa real Com a classe que ir mostrar o Splash pronta, vamos fazer uma outra classe para "s imular" um programa real, pesado. Para fazer tal ao simplemente colocado um lao for () no construtor da classe, assim possvel analisar o funcionamento do Splash. Se fosse um Thread.sleep(), estaramos perdendo o tempo que a splash fica aberta! O cd igo o seguinte: view plaincopy to clipboardprint? class Botoes extends JFrame { JButton botao; JFrame frame; JPanel panel; /** * Construtor da aplicacao principal. * Simula um load demorado com um loop, para mostrar que * a tela Splash realmente aparece enquanto a aplicacao * principal eh carregada. * */ public Botoes() {

for (int i = 0; i < 50000; i++) System.out.println(i); frame = new JFrame("Botoes"); panel = new JPanel(); panel.setLayout(new GridLayout(4, 1)); botao = new JButton("Aplicao inicializada"); botao.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); panel.add(botao); frame.getContentPane().add(panel, BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void initApplication() { frame.pack(); frame.setVisible(true); Splash.getInstance().finish(); } } class Botoes extends JFrame { JButton botao; JFrame frame; JPanel panel; /** * Construtor da aplicacao principal. * Simula um load demorado com um loop, para mostrar que * a tela Splash realmente aparece enquanto a aplicacao * principal eh carregada. * */ public Botoes() { for (int i = 0; i < 50000; i++) System.out.println(i); frame = new JFrame("Botoes"); panel = new JPanel(); panel.setLayout(new GridLayout(4, 1)); botao = new JButton("Aplicao inicializada"); botao.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); panel.add(botao); frame.getContentPane().add(panel, BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

public void initApplication() { frame.pack(); frame.setVisible(true); Splash.getInstance().finish(); } } Finalizando Construindo a classe que implementa main(): Para testar nossa tela Splash basta fazer um programinha extremamente simples, como o mostrado abaixo: view plaincopy to clipboardprint? public class TestSplash { public static void main(String[] args) { // Faz o splash aparecer na tela Splash.getInstance().openSplash(); // Chama a nossa aplicacao principal Botoes b = new Botoes(); b.initApplication(); } } public class TestSplash { public static void main(String[] args) { // Faz o splash aparecer na tela Splash.getInstance().openSplash(); // Chama a nossa aplicacao principal Botoes b = new Botoes(); b.initApplication(); } } Pronto, agora basta compilar e visualizar o exemplo. Se tudo ocorrer direito, o Splash com o logo do GUJ ir aparecer na tela do monitor, e prestando ateno na tela do terminal voc ir ver um contador sendo incrementado. Este contador o que foi cri ado na classe Botao. O Splash ir sumir da tela assim que o contador terminar. iss o, um exemplo bastante simples mas que faz algo bem legal. Com algumas linhas de cdigo a mais da para fazer coisas bem legais, como mostrar o status do programa sendo carregado direto na tela Splash, por exemplo. Claro que ainda existem milh ares de outras abordagens para uma SplashScreen ser criada!

Vous aimerez peut-être aussi