Está en la página 1de 18

Descripcin del uso que se da a la Componente, en el contexto de su aplicacin

Una tarea ejecutndose en un programa puede tardar un poco en completarse. Un


programa amigable proporciona alguna indicacin al usuario sobre lo que puede tardar la
tarea y lo que ya lleva realizado.
El paquete Swing proporciona tres clases para ayudar a crear GUIs que monitoricen
y muestren el progreso de tareas de larga duracin. Una de ellas es el componente
JprogressBar.
JprogressBar : Una barra de progreso muestra grficamente qu cantidad total de la tarea
se esta ejecutando.
Aqu podemos ver un ejemplo de una pequea aplicacin que utiliza una barra de
progreso para medir el progreso de una tarea que se ejecuta

Un ejemplo: la forma mas conocida de este componente JProgressbar, es cuando se instala


los software y aparece un barra que en porcentaje va desde 0-100% siendo el 100% la carga
completa del programa.

Un JprogressBar, muestra un componte horizontal, de forma que al darle la partida a travs


de un evento, que puede ser de un JButton u otro componente que se desee, aparezca en
forma de barra que se va llenando durante la ejecucin.
Ejemplo 1:ProgressBar.java
import
import
import
import
import
import
import
import

java.io.*;
javax.swing.*;
javax.swing.event.*;
javax.swing.text.*;
javax.swing.border.*;
javax.swing.colorchooser.*;
javax.swing.filechooser.*;
javax.accessibility.*;

import
import
import
import
import
import

java.awt.*;
java.awt.event.*;
java.beans.*;
java.util.*;
java.io.*;
java.applet.*;

import java.net.*;
public class ProgressBar extends JFrame implements ActionListener
{
String value;
javax.swing.Timer timer1;
javax.swing.Timer timer2;
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel PanelPrincipal = new JPanel();
JProgressBar progressBar1;
JProgressBar progressBar2;
JTextArea progressTextArea1=new JTextArea(10,12);
JTextArea progressTextArea2=new JTextArea(10,12);
JButton BotonOk1 = new JButton("Ok");
JButton BotonOk2 = new JButton("Ok");
Container Contenedor;
public ProgressBar()
{
Contenedor = getContentPane();
JFrame FramePrincipal = new JFrame("Ejemplo de ProgressBar");
FramePrincipal.addWindowListener( new WindowAdapter( )
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
);
progressTextArea1.setTabSize(20);
progressTextArea2.setTabSize(20);
PanelPrincipal.setLayout(new GridLayout(2,1));
progressBar1 = new JProgressBar(JProgressBar.HORIZONTAL,
0,text1.length()) {
public Dimension getPreferredSize() {
return new Dimension(300, super.getPreferredSize().height);
}
};
progressBar2 = new JProgressBar(JProgressBar.HORIZONTAL,
0,text2.length()) {
public Dimension getPreferredSize() {
return new Dimension(300, super.getPreferredSize().height);
}
};
BotonOk1.addActionListener(this);
panel1.add(progressTextArea1);
panel1.add(progressBar1);
panel1.add(BotonOk1);

progressBar1.setStringPainted(true);
BotonOk2.addActionListener(this);
panel2.add(progressTextArea2);
panel2.add(progressBar2);
panel2.add(BotonOk2);
progressBar2.setStringPainted(true);
PanelPrincipal.add(panel1);
PanelPrincipal.add(panel2);
Contenedor.add(PanelPrincipal,BorderLayout.NORTH);
progressBar1.getAccessibleContext().setAccessibleName(getString(""));
progressBar2.getAccessibleContext().setAccessibleName(getString(""));
FramePrincipal.setContentPane(PanelPrincipal);
FramePrincipal.pack();
FramePrincipal.show();
}
public void actionPerformed(ActionEvent e)
{
Object Item = e.getSource();
if (Item == BotonOk1)
{
timer1 = new javax.swing.Timer(18, crearAccion1());
timer1.start();
}
if (Item == BotonOk2)
{
timer2 = new javax.swing.Timer(18, crearAccion2());
timer2.start();
}
}
int texto = 0;
int texto2=0;
String text1 = getString("Este es un ejemplo\nde ProgressBar\nmostrando
el tiempo\nque toma en leer este\nString");
public Action crearAccion1() {
return new AbstractAction("cargar") {
public void actionPerformed (ActionEvent e) {
if(progressBar1.getValue() < progressBar1.getMaximum()) {
progressBar1.setValue(progressBar1.getValue() + 1);
progressTextArea1.append(text1.substring(texto, texto+1));
texto++;
} else {
if(timer1 != null) {
timer1.stop();
timer1 = null;
}

}
}
};
};
String text2 = getString("prueba corta");
public Action crearAccion2() {
return new AbstractAction("cargar") {
public void actionPerformed (ActionEvent e) {
if(progressBar2.getValue() < progressBar2.getMaximum()) {
progressBar2.setValue(progressBar2.getValue() + 1);
progressTextArea2.append(text2.substring(texto2, texto2+1));
texto2++;
} else {
if(timer2 != null) {
timer2.stop();
timer2 = null;
}
}
}
};
};

public String getString(String key)


{
value = key;
return value;
}
public static void main(String[] args) {
ProgressBar demo = new ProgressBar();
}
}

se genera la siguiente salida

al hacer clic sobre los botones OK aparece algo como esto

en donde se aprecia la diferencia entre ambos string, el string de arriba le toma mas tiempo
en completar el ProgressBar, mientras que el string de abajo se demora mucho menos por
ser un string muy corto a diferencia del de arriba.

NOTA : en esta parte se va explicar el componte progressbar como si fuera uno solo.
El constructor usado para crear la barra de progreso selecciona los valores mximo
y mnimo de la barra. Tambin se pueden seleccionar estos valores con los mtodos
setMinimum y setMaximum. Los valores mnimo y mximo utilizados en este programa
son 0 y la longitud de la tarea, lo que es tpico de muchos programas y tareas. Sin embargo,
los valores mximo y mnimo de una barra de progreso pueden ser cualquier valor, incluso
negativos. El cdigo tambin selecciona el valor actual de la barra a 0.
private JProgressBar progressBar = new JProgressBar(0, task.getLengthOfTask());

Los valores mnimo, actual, y mximo deben relacionarse de esta forma.


minimum <= current <= maximum

La llamada a setStringPainted hace que la barra de progreso muestre un string de


porcentaje dentro de sus lmites. Por defecto, la cadena indica el porcentaje completo de la
barra de progreso. El string de porcentaje es el valor devuelto por el mtodo.
progressBar.setStringPainted(true);

Se arranca la tarea pulsando el botn Ok. Una vez que la tarea ha comenzado, un
temporizador (un ejemplar de la clase Timer) dispara un evento crearAccin cada segundo.
Aqu est el mtodo ActionPerformed del oyente de action del temporizador.
public void actionPerformed(ActionEvent e)
{
Object Item = e.getSource();
if (Item == BotonOk)
{
timer = new javax.swing.Timer(18, crearAccion());
timer.start();
}
}

En esta lnea obtiene la cantidad de trabajo completada por la tarea y actualiza la


barra de progreso con ese valor. Por eso la barra de progreso mide el progreso hecho por la
tarea cada segundo, no el tiempo enlapsado.
progressBar.setValue(progressBar.getValue() + 1);

Se utiliza una barra de progreso cuando:


* Queremos ms control sobre la configuracin de la barra de progreso. Si estamos
trabajando directamente con una barra de progreso, podemos hacer que se muestre
verticalmente, podemos proporcionar una cadena para que la muestre, podemos registrar
oyentes de cambio, y podemos proporcionarle un modelo de datos personalizado.

* Necesitamos ms de una barra de progreso. Con algunas tareas, necesitamos


monitorizar ms de un parmetro. Por ejemplo, un programa de instalacin podra
monitoriazar el espacio de disco utilizado adems del nmero de ficheros que ya han sido
instalados.
* Necesitamos reutilizar la barra de progreso. Una barra de progreso puede ser reutilizada; un monitor de progreso no. El monitor de progreso no tiene un mtodo reset, y
una vez que millisToDecideToPopup ha expirado el monitor ha terminado su trabajo.
Los componentes utilizados en la aplicacin son los siguientes :
Se agrega al panel un area de texto
panel.add(progressTextArea);
Se agrega al panel el boton
panel.add(Ok);
Se agrega al panel el ProgressBar
panel.add(progressBar);
agregando a la izquierda y a la derecha

al hacer click en el boton Ok

se observa el nivel de porcentaje.

otra propiedades de progressBar es que, se puede cambiar el porcentaje de partida, para este caso partir de
10%
progressBar.setValue(100);
la propiedad setStringPainted es mostrar el porcentaje durante la accin del proceso
progressBar.setStringPainted(true);

En este apartado se van a realizar algunos ejemplos con los metodos del componente
Ejemplo 2:ProgressBar1.java
Se muestra la diferencia del progressbar en forma vertical u horizontal. Se marca con
negrita donde se genera el cambio.
import
import
import
import
import
import
import
import
import

javax.swing.*;
javax.swing.event.*;
javax.swing.text.*;
javax.swing.border.*;
javax.swing.colorchooser.*;
java.awt.*;
java.awt.event.*;
java.util.*;
java.io.*;

public class ProgressBar1 extends JFrame implements ActionListener


{
String value;
javax.swing.Timer timer1;
javax.swing.Timer timer2;
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel PanelPrincipal = new JPanel();
JProgressBar progressBar1;
JProgressBar progressBar2;
JButton BotonOk1 = new JButton("Ok");
JButton BotonOk2 = new JButton("Ok");
Container Contenedor;
public ProgressBar1()
{
Contenedor = getContentPane();
JFrame FramePrincipal = new JFrame("Ejemplo de ProgressBar");
FramePrincipal.addWindowListener( new WindowAdapter( )
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
);

PanelPrincipal.setLayout(new GridLayout(2,1));
/*
SE PUEDE PONER EL PROGRESSbAR EN FORMA VERTICAL U HORIZONTAL
*/
progressBar1 = new JProgressBar(JProgressBar.VERTICAL, 0,text1.length())
{
public Dimension getPreferredSize() {
return new Dimension(30, super.getPreferredSize().height);
}
};
progressBar2 = new JProgressBar(JProgressBar.HORIZONTAL,
0,text2.length()) {
public Dimension getPreferredSize() {
return new Dimension(300, super.getPreferredSize().height);
}
};
BotonOk1.addActionListener(this);
panel1.add(progressBar1);
panel1.add(BotonOk1);
progressBar1.setStringPainted(true);
BotonOk2.addActionListener(this);
panel2.add(progressBar2);
panel2.add(BotonOk2);
progressBar2.setStringPainted(true);
PanelPrincipal.add(panel1);
PanelPrincipal.add(panel2);
Contenedor.add(PanelPrincipal,BorderLayout.NORTH);
progressBar1.getAccessibleContext().setAccessibleName(getString(""));
progressBar2.getAccessibleContext().setAccessibleName(getString(""));
FramePrincipal.setContentPane(PanelPrincipal);
FramePrincipal.pack();
FramePrincipal.show();
}
public void actionPerformed(ActionEvent e)
{
Object Item = e.getSource();
if (Item == BotonOk1)
{
timer1 = new javax.swing.Timer(18, crearAccion1());
timer1.start();
}
if (Item == BotonOk2)
{
timer2 = new javax.swing.Timer(18, crearAccion2());
timer2.start();

}
}
int texto = 0;
int texto2=0;
String text1 = getString("Este es un ejemplo\nde ProgressBar\nmostrando
el tiempo\nque toma en leer este\nString");
public Action crearAccion1() {
return new AbstractAction("cargar") {
public void actionPerformed (ActionEvent e) {
if(progressBar1.getValue() < progressBar1.getMaximum()) {
progressBar1.setValue(progressBar1.getValue() + 1);
texto++;
} else {
if(timer1 != null) {
timer1.stop();
timer1 = null;
}
}
}
};
};
String text2 = getString("Este es un ejemplo\nde ProgressBar\nmostrando
el tiempo\nque toma en leer este\nString");
public Action crearAccion2() {
return new AbstractAction("cargar") {
public void actionPerformed (ActionEvent e) {
if(progressBar2.getValue() < progressBar2.getMaximum()) {
progressBar2.setValue(progressBar2.getValue() + 1);
texto2++;
} else {
if(timer2 != null) {
timer2.stop();
timer2 = null;
}
}
}
};
};

public String getString(String key)


{
value = key;
return value;
}
public static void main(String[] args) {
ProgressBar1 demo = new ProgressBar1();
}

cuya salida es la siguiente

ejemplo 3 : ProgressBar2.java
se agrega o elimina si es necesario mostrar el porcentaje en la barra de progreso. Se amraca
con negrita donde se genera el cambio.
import
import
import
import
import
import
import
import
import

javax.swing.*;
javax.swing.event.*;
javax.swing.text.*;
javax.swing.border.*;
javax.swing.colorchooser.*;
java.awt.*;
java.awt.event.*;
java.util.*;
java.io.*;

public class ProgressBar2 extends JFrame implements ActionListener


{
String value;
javax.swing.Timer timer1;
JPanel panel1 = new JPanel();
JPanel PanelPrincipal = new JPanel();
JProgressBar progressBar1;
JButton BotonOk1 = new JButton("Ok");
Container Contenedor;
public ProgressBar2()
{
Contenedor = getContentPane();
JFrame FramePrincipal = new JFrame("Ejemplo de ProgressBar");
FramePrincipal.addWindowListener( new WindowAdapter( )
{
public void windowClosing( WindowEvent e )

{
System.exit( 0 );
}
}
);
PanelPrincipal.setLayout(new GridLayout(1,1));
progressBar1 = new JProgressBar(JProgressBar.VERTICAL, 0,text1.length())
{
public Dimension getPreferredSize() {
return new Dimension(30, super.getPreferredSize().height);
}
};
BotonOk1.addActionListener(this);
panel1.add(progressBar1);
panel1.add(BotonOk1);
/*en esta parte se puede cambiar el false por el true*/
progressBar1.setStringPainted(false);
PanelPrincipal.add(panel1);
Contenedor.add(PanelPrincipal,BorderLayout.NORTH);
progressBar1.getAccessibleContext().setAccessibleName(getString(""));
FramePrincipal.setContentPane(PanelPrincipal);
FramePrincipal.pack();
FramePrincipal.show();
}
public void actionPerformed(ActionEvent e)
{
Object Item = e.getSource();
if (Item == BotonOk1)
{
timer1 = new javax.swing.Timer(18, crearAccion1());
timer1.start();
}
}
int texto = 0;
int texto2=0;
String text1 = getString("Este es un ejemplo\nde ProgressBar\nmostrando
el tiempo\nque toma en leer este\nString");
public Action crearAccion1() {
return new AbstractAction("cargar") {
public void actionPerformed (ActionEvent e) {
if(progressBar1.getValue() < progressBar1.getMaximum()) {
progressBar1.setValue(progressBar1.getValue() + 1);
texto++;
} else {
if(timer1 != null) {
timer1.stop();
timer1 = null;

}
}
}
};
};
public String getString(String key)
{
value = key;
return value;
}
public static void main(String[] args) {
ProgressBar2 demo = new ProgressBar2();
}
}

setStringPainted(true)

setStringPainted(false)

ejemplo 4: ProgressBar3.java
ejemplo con diferentes dimensiones del ProgressBar. Se marca con negrita
la parte donde se produce el cambio.
import
import
import
import
import
import
import
import
import

javax.swing.*;
javax.swing.event.*;
javax.swing.text.*;
javax.swing.border.*;
javax.swing.colorchooser.*;
java.awt.*;
java.awt.event.*;
java.util.*;
java.io.*;

public class ProgressBar3 extends JFrame implements ActionListener


{
String value;
javax.swing.Timer timer1;
JPanel panel1 = new JPanel();
JPanel PanelPrincipal = new JPanel();
JProgressBar progressBar1;
JButton BotonOk1 = new JButton("Ok");

Container Contenedor;
public ProgressBar3()
{
Contenedor = getContentPane();
JFrame FramePrincipal = new JFrame("Ejemplo de ProgressBar");
FramePrincipal.addWindowListener( new WindowAdapter( )
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
);
PanelPrincipal.setLayout(new GridLayout(1,1));
progressBar1 = new JProgressBar(JProgressBar.VERTICAL, 0,text1.length())
{
public Dimension getPreferredSize() {
return new Dimension(10, super.getPreferredSize().height);
}
};
BotonOk1.addActionListener(this);
panel1.add(progressBar1);
panel1.add(BotonOk1);
progressBar1.setStringPainted(false);
PanelPrincipal.add(panel1);
Contenedor.add(PanelPrincipal,BorderLayout.NORTH);
progressBar1.getAccessibleContext().setAccessibleName(getString(""));
FramePrincipal.setContentPane(PanelPrincipal);
FramePrincipal.pack();
FramePrincipal.show();
}
public void actionPerformed(ActionEvent e)
{
Object Item = e.getSource();
if (Item == BotonOk1)
{
timer1 = new javax.swing.Timer(18, crearAccion1());
timer1.start();
}
}
int texto = 0;
int texto2=0;
String text1 = getString("Este es un ejemplo\nde ProgressBar\nmostrando
el tiempo\nque toma en leer este\nString");
public Action crearAccion1() {
return new AbstractAction("cargar") {
public void actionPerformed (ActionEvent e) {

if(progressBar1.getValue() < progressBar1.getMaximum()) {


progressBar1.setValue(progressBar1.getValue() + 1);
texto++;
} else {
if(timer1 != null) {
timer1.stop();
timer1 = null;
}
}
}
};
};
public String getString(String key)
{
value = key;
return value;
}
public static void main(String[] args) {
ProgressBar3 demo = new ProgressBar3();
}
}

forma 1
progressBar1 = new JProgressBar(JProgressBar.VERTICAL, 0,text1.length())
{
public Dimension getPreferredSize() {
return new Dimension(10,180); //10 de ancho x 180 de alto
}
};

forma 2
progressBar1 = new JProgressBar(JProgressBar.VERTICAL, 0,text1.length())
{
public Dimension getPreferredSize() {
return new Dimension(30,180); //30 de ancho x 180 de alto
}
};

forma 3 exagerada
progressBar1 = new JProgressBar(JProgressBar.VERTICAL, 0,text1.length())
{
public Dimension getPreferredSize() {
return new Dimension(100,180); //30 de ancho x 180 de alto
}
};

El API del ProgressBar


Las siguientes tablas listan los mtodos y constructores ms utilizados de
JProgressBar. Otros mtodos interesantes estn definidos por las clases JComponent y
Component.
Seleccionar u Obtener los Valores/Restricciones de la Barra de Progreso
Mtodo
void setValue(int)

Propsito
Selecciona u obtiene el valor actual de la barra de progreso.
El valor est limitado por los valores mximo y mnimo.

int getValue()
double getPercentComplete()
void setMinimum(int)

Obtiene el porcentaje terminado por la barra de progreso.

int getMinimum()

Selecciona u obtiene el valor mnimo de la barra de progreso.

void setMaximum(int)

int getMaximum()

Selecciona u obtiene el valor mximo de la barra de progreso.

void
setModel(BoundedRangeModel)

Selecciona u obtiene el modelo utilizado por la barra de


progreso. El modelo establece los valores y restricciones de
la barra de progreso. Podemos utilizar este mtodo como
alternativa a utilizar los mtodos de seleccin u obtencin
individuales listados arriba.

BoundedRangeModel
getMaximum()

Ajuste de la Apariencia de la Barra de Progreso


Mtodo
void setOrientation(int)

int getOrientation()

Propsito
Selecciona u obtiene si la barra de progreso es vertical u horizontal.
Los valores aceptados son JProgressBar.VERTICAL o
JProgressBar.HORIZONTAL.

void
setBorderPainted(boolean)

boolean
isBorderPainted()
void
setStringPainted(boolean)

Selecciona u obtiene si la barra de progreso tiene borde.

boolean
isStringPainted()

Selecciona u obtiene si la barra de progreso muestra el porcentaje.


Por defecto, el valor de la cadena de porcentaje es el valor devuelto
por getPercentComplete formateado a porcentaje. Podemos
cambiar la cadena de porcentaje con setString.

void setString(String)

Selecciona u obtiene la cadena de porcentaje.

String getString()