Quero fazer uma progress bar simples que quando eu clique em um botao ela ative e vá do 1% até o 100% em cerca de 3 segundos ± só de enfeite mesmo,
Podem me ajudar?
Obrigado!
Um exemplo mais que ridículo:
public class Frame extends JFrame {
public static void main(String[] args) {
new Frame();
}
public Frame() {
super("Exemplo ridiculo!");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(new Dimension(230, 100));
pack();
setLocationRelativeTo(null);
init();
setVisible(true);
}
private void init() {
JPanel p = new JPanel();
final JButton b = new JButton("Botao");
final JProgressBar pr = new JProgressBar();
pr.setStringPainted(true);
pr.setValue(0);
pr.setSize(new Dimension(100, 23));
p.add(pr);
p.add(b);
add(p);
final SwingWorker w = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
for (int i = 1; i <= 100; i++) {
try {
pr.setValue(i);
pr.setString(i + "%");
Thread.sleep(20);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
return 0;
}
};
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
w.execute();
}
});
}
}
De propósito não fiz nada esquisito neste programa. Não usei MigLayout nem usei java.util.concurrent, só coisas bem simples.
package guj;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.border.EmptyBorder;
public class ExemploJProgressBar3Segundos extends JFrame {
private JPanel contentPane;
private JProgressBar progressBar;
private JPanel panel;
private JButton btnIniciar;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ExemploJProgressBar3Segundos frame = new ExemploJProgressBar3Segundos();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ExemploJProgressBar3Segundos() {
setTitle("Exemplo Progress Bar Temporizada");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
contentPane.add(getProgressBar(), BorderLayout.NORTH);
contentPane.add(getPanel(), BorderLayout.SOUTH);
}
private JProgressBar getProgressBar() {
if (progressBar == null) {
progressBar = new JProgressBar();
progressBar.setStringPainted(true);
}
return progressBar;
}
private JPanel getPanel() {
if (panel == null) {
panel = new JPanel();
panel.add(getBtnIniciar());
}
return panel;
}
private JButton getBtnIniciar() {
if (btnIniciar == null) {
btnIniciar = new JButton("Iniciar!");
btnIniciar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnIniciar.setEnabled(false);
porcentagem = 0;
timer = new Timer(30, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
porcentagem++;
progressBar.setValue(porcentagem);
if (porcentagem >= 100) {
timer.stop();
btnIniciar.setEnabled(true);
}
}
});
timer.start();
}
});
}
return btnIniciar;
}
private Timer timer;
private int porcentagem;
}
Pode me ajudar ou fazer algo mais simples? não consigo implementar isso, sou iniciante, eu uso Netbeans só pra constar
EDIT* Vou tentar implementar o do segundo que postou , obrigado mesmo! qualquer coisa eu volto
Noite,
amigo tenho um simples, porem não esta 100% mas da uma olhada, talvez vc consiga fazer com que ele fique 100%
to estudando meio que na tora… copiando e estudando codigos… e tals… o problema da barra ai é que pula de 0% pra 100% direto… gostaria q ele interagisse com o metodo xCarregando(); la tu vai entender
segue o codigo que copiei tbm pode ajudar…
[code]import java.awt.;
import javax.swing.;
import java.awt.event.*;
public class exProgressBar extends JFrame {
// Define a Barra de Progresso
JProgressBar prbConta = new JProgressBar();
// Define uma Thread para simular rodando
Thread roda;
public exProgressBar() {
this.setSize(264, 150);
this.setTitle(“Exemplo do JProgressBar”);
// Define o valor inicial da Barra
prbConta.setMinimum(0);
// Define o valor final da Barra de Progresso
prbConta.setMaximum(50);
// Mostra o valor na barra
prbConta.setStringPainted(true);
// Insere a barra
this.getContentPane().add(prbConta, BorderLayout.SOUTH);
// Cria um botão para iniciar o processo
JButton butInicia = new JButton(“Inicia”);
// Ao acionar o botão
butInicia.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Inicia o valor da Barra
prbConta.setValue(prbConta.getMinimum());
// Inicia o processo
if (roda == null) {
roda = new roda();
roda.start();
}
}});
// Insere o botão na Janela
this.getContentPane().add(butInicia, BorderLayout.NORTH);
this.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
class roda extends Thread {
public void run() {
// Cria um objeto para atualizar a Barra
Runnable runner = new Runnable() {
public void run() {
// Obtém o resultado atual da Barra
int valor = prbConta.getValue();
// Atualiza a Barra
prbConta.setValue(valor+1);
}
};
for (int i = 0; i < 50; i++) {
// ---------------------------------
// Faça aqui o processo a realizar
// ---------------------------------
// Atualiza a Barra de Progresso
try {
SwingUtilities.invokeAndWait(runner);
} catch (java.lang.reflect.InvocationTargetException e) {
break;
} catch (InterruptedException e) {
}
}
roda = null;
}
}
public static void main(String args[]) {
exProgressBar nova = new exProgressBar();
nova.show();
}
}[/code]
Obrigada tibum, me ajudou muito!