miércoles, 23 de junio de 2010

Crear una barra de progreso en Java



Todos sabemos de la importancia de la retroalimentación cuando estamos utilizando una aplicación informática: en todo momento, el usuario debe estar informado del estado de las operaciones que se están realizando. Mucho más cuando una operación tarda mucho en realizarse, como la copia de archivos de gran volumen, ...
Un elemento imprescindible para dar ese tipo de información es la barra de progreso. Se va a explicar cómo hacer ésto en Java.


 

El código


Constructor que crea un JPanel y colocación los elementos gráficos dentro.
 public Progress() {
  super("Progress");
  
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JPanel pane = new JPanel();
  pane.setLayout(new FlowLayout());
  current = new JProgressBar(0, 2000); // Crear un JProgressBar con valores 0-2000
  current.setValue(0); // Fijar valor por defecto.
  current.setStringPainted(true); // Mostrar valor numérico del progreso de la barra
  pane.add(current);
  setContentPane(pane);
  }


Médoto para calcular los Valores del progreso de la barra
Aquí debemos decidir, qué criterios se seguirán para determinar el valor de la barra en cada momento, ejemplo: MB de datos copiados, operaciones realizadas, ... En éste caso, al tratarse de un ejemplo sencillo, usaremos un contador de 0 a 2000:

 public void iterate() {
  while (num < 2000) {
  current.setValue(num); // Asignar un valor a la barra de progreso.
  try {
  Thread.sleep(1000);
  } catch (InterruptedException e) { }
  num += 95;
  }
  } 


Método Main
 public static void main(String[] arguments) {
  Progress frame = new Progress(); // Crea un objeto Progress (constructor visto antes).
  frame.pack(); 
  frame.setVisible(true);
  frame.iterate(); // LLamada al método iterate (visto antes).
  }


Código completo
import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*; 
public class Progress extends JFrame {
JProgressBar current;
  JTextArea out;
  JButton find;
  Thread runner;
  int num = 0;
public Progress() {
  super("Progress");
  
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JPanel pane = new JPanel();
  pane.setLayout(new FlowLayout());
  current = new JProgressBar(0, 2000);
  current.setValue(0);
  current.setStringPainted(true);
  pane.add(current);
  setContentPane(pane);
  }

public void iterate() {
  while (num < 2000) {
  current.setValue(num);
  try {
  Thread.sleep(1000);
  } catch (InterruptedException e) { }
  num += 95;
  }
  }
public static void main(String[] arguments) {
  Progress frame = new Progress();
  frame.pack();
  frame.setVisible(true);
  frame.iterate();
  }
  }

 


Fuente

http://www.java-tips.org

 




Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO