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.

