Como fazer uma Splash Screen em Java

Olá pessoal…

Hoje irei mostrar como fazer uma Splash Screen (tela de Splash) utilizando a linguagem Java.


Uma tela de Splash é uma tela de apresentação e de carregamento de um programa, que geralmente é mostrada enquanto carrega bibliotecas e dlls, como por exemplo, ao abrir o Libre Office, o Microsoft Office ou o Photoshop, eles mostram uma tela de Splash de carregamento.

Primeiramente, devemos ter uma imagem que será utilizada como Splash, iremos utilizar uma imagem com as dimisões de 700 x 300 (largura x altura), como abaixo:

Imagem de Splash

Imagem de Splash

A imagem ficará dentro de uma subpasta nomeada de ‘imagens’.
Temos que ter também, uma função que será chamada pelo Splash, no caso foi desenvolvido um menu simples com dois botões:

Menu Principal

Menu Principal

Abaixo os códigos fonte.

//Bibliotecas
import javax.swing.*;
import java.awt.*;
import java.awt.event.*; 

//Classe Splash, que extende da JFrame
public class Splash extends JFrame
{
  private static JLabel lbSplash;          //label responsável por conter a imagem
  private ImageIcon imSplash;              //imagem que será mostrada no label

  //função principal que será carregada
  public static void main(String arg[]){
    //Criando a janela de Splash
    Splash s = new Splash();

    //definindo o tipo de fechamento, o tamanho, tirando a barra de títulos, deixando no centro, definindo um icone e mostrando a janela
    s.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    s.setSize(700,300);
    s.setUndecorated(true);
    s.setLocationRelativeTo(null);
    s.setVisible(true);

    //forçando a espera de 1500 milissegundos (1,5 segundos)
    try {
      Thread.sleep (1500);
    }
    catch (InterruptedException ex) {}

    //fechando a janela
    s.dispose();
  }

  //função responsável por carregar os dados da janela (layout e imagem)
  public Splash() {
    //definindo o layout como nulo
    setLayout(null);

    //setando a imagem de splash
    imSplash = new ImageIcon("imagens/splash_screen.png");

    //adicionando a imagem no label e mudando o tamanho
    lbSplash = new JLabel(imSplash);
    lbSplash.setBounds(0,0,700,300);

    //adicionando componentes na janela
    add(lbSplash);
  }

  //função ao fechar a splash
  public void dispose(){
    //criar a tela de menu, e fechar o splash
    new Menu();
    super.dispose();
  }

}
//Bibliotecas - Gráficos
import javax.swing.*;
import javax.swing.JOptionPane;

//Bibliotecas - Eventos
import java.awt.*;
import java.awt.event.*;

//Classe de Menu que é extendida da JFrame e implementa ActionListener
public class Menu  extends JFrame implements ActionListener
{
  //Declaração de botões - Ok, Cancelar e Esqueci
  private JButton btOk, btCancel;

  //Função que carrega dados da tela de login
  public Menu() {
    //setando o layout como null
    setLayout(null);

    //botão Ok
    btOk = new JButton("OK");
    btOk.setMnemonic('O');
    btOk.setToolTipText("Botão OK");
    btOk.setForeground(Color.RED);
    btOk.addActionListener(this);
    btOk.setBounds(20,15,100,20);
    add(btOk);

    //botão Cancelar
    btCancel = new JButton("Cancelar");
    btCancel.setMnemonic('C');
    btCancel.setToolTipText("Botão Cancelar");
    btCancel.setForeground(Color.RED);
    btCancel.addActionListener(this);
    btCancel.setBounds(20,45,100,20);
    add(btCancel);

    //Configurações da janela
    setSize(150,120);
    setLocationRelativeTo(null);
    getContentPane().setBackground(Color.WHITE);
    setTitle("Menu");
    setResizable(false);
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setVisible(true);
  }

  //Interação com usuário - cliques nos botões
  public void actionPerformed(ActionEvent acesso)
  {
    //botão Ok
    if (acesso.getSource() == btOk) {
      System.out.println("Botão OK pressionado!");
    }

    //botão Cancelar
    if (acesso.getSource() == btCancel) {
      System.out.println("Botão Cancelar pressionado!");
    }

  }

}

Se quiser fazer o download do código, clique aqui.

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

4 Responses

  1. Cara o Swing já está obsoleto, seria bacana um tutorial com JavaFX, talvez utilizando os FXMLs que desacoplam o código que monta a tela com o que ela relativamente faz.

Deixe uma resposta