Hoje vou mostrar como fazer uma barra de progresso simples em Java.
Alguns clientes as vezes pedem para fazer uma aplicação pequena em Java, e às vezes precisamos criar alguma barra de progresso.
Pensando nisso decidi montar esse tutorial. O primeiro passo ao criar a tela, é desenhar os componentes, sendo que nessa tela terei só a barra e um botão.
A partir disso, ao colocar uma ação no botão, criamos uma tarefa, e essa tarefa irá atualizar as propriedades da barra.
Abaixo o código fonte desenvolvido para exemplificar:
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.UIManager.*; public class TestTi extends JFrame implements ActionListener, PropertyChangeListener { /* Declarando variaveis e componentes que serao usados na tela */ private static final long serialVersionUID = 1L; private JButton btConfirmar; private JProgressBar progressBar; private Task task; public TestTi() { setLayout(null); /* Barra de Progresso colocando de 0 a 100 */ progressBar = new JProgressBar(0, 100); progressBar.setStringPainted(true); progressBar.setBounds(10,10,470,30); progressBar.setString("..."); add(progressBar); /* Botao Confirmar */ btConfirmar = new JButton("Confirmar"); btConfirmar.setBounds(190,50,120,30); btConfirmar.setToolTipText("Confirma a leitura"); btConfirmar.setMnemonic('C'); btConfirmar.addActionListener(this); add(btConfirmar); /* Definindo um estilo visual para aplicacao */ try { for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); SwingUtilities.updateComponentTreeUI(this); this.pack(); break; } } } catch (Exception e) {} } public void actionPerformed(ActionEvent e) { /* Se houver clique no botao confirmar, deixa o cursor do mouse carregando, e cria uma nova tarefa */ if (e.getSource() == btConfirmar) { setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); task = new Task(); task.addPropertyChangeListener((PropertyChangeListener) this); task.execute(); } } public void propertyChange(PropertyChangeEvent evt) { /* Definindo o valor da barra de progresso na mudanca de propriedade */ if ("progress" == evt.getPropertyName()) { int progress = (Integer) evt.getNewValue(); progressBar.setValue(progress); } } class Task extends SwingWorker<Void, Void> { @Override public Void doInBackground() throws InterruptedException { /* Define a barra como 0, e as variaveis de controle */ setProgress(0); int atual = 0; int porcentagem = 0; int total = 100; /* Define a barra como o valor total */ setProgress(total); /* Percorre do valor inicial ate o total, e altera tambem a mensagem mostrando a porcentagem */ for (atual = 0; atual <= total; atual++) { porcentagem = (int) ((atual*100)/(total)); setProgress(porcentagem); progressBar.setString(String.valueOf(porcentagem)+" %"); //Thread.sleep(100); } return null; } @Override public void done() { /* Ao finalizar volta o cursor ao normal */ Toolkit.getDefaultToolkit().beep(); setCursor(null); } } public static void main(String arg[]) { /* Criando a janela principal */ TestTi tstJanela = new TestTi(); tstJanela.setSize(500,120); tstJanela.setLocationRelativeTo(null); tstJanela.setTitle("TestTi - Barra de Progresso"); tstJanela.getContentPane().setBackground(Color.WHITE); tstJanela.setResizable(false); tstJanela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); tstJanela.setVisible(true); } }
Bom pessoal, por hoje é só.
Abraços e até a próxima.