Download JProgressBAr

Document related concepts
no text concepts found
Transcript
Descripción del uso que se da a la Componente, en el contexto de su aplicación
Una tarea ejecutándose en un programa puede tardar un poco en completarse. Un
programa amigable proporciona alguna indicación 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 duración. Una de ellas es el componente
JprogressBar.
JprogressBar : Una barra de progreso muestra gráficamente qué cantidad total de la tarea
se esta ejecutando.
Aquí podemos ver un ejemplo de una pequeña aplicación 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 través
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 ejecución.
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 máximo
y mínimo de la barra. También se pueden seleccionar estos valores con los métodos
setMinimum y setMaximum. Los valores mínimo y máximo utilizados en este programa
son 0 y la longitud de la tarea, lo que es típico de muchos programas y tareas. Sin embargo,
los valores máximo y mínimo de una barra de progreso pueden ser cualquier valor, incluso
negativos. El código también selecciona el valor actual de la barra a 0.
private JProgressBar progressBar = new JProgressBar(0, task.getLengthOfTask());
Los valores mínimo, actual, y máximo 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 límites. Por defecto, la cadena indica el porcentaje completo de la
barra de progreso. El string de porcentaje es el valor devuelto por el método.
progressBar.setStringPainted(true);
Se arranca la tarea pulsando el botón Ok. Una vez que la tarea ha comenzado, un
temporizador (un ejemplar de la clase Timer) dispara un evento crearAcción cada segundo.
Aquí está el método 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 línea 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 más control sobre la configuración 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 más de una barra de progreso. Con algunas tareas, necesitamos
monitorizar más de un parámetro. Por ejemplo, un programa de instalación podría
monitoriazar el espacio de disco utilizado además del número 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 método reset, y
una vez que millisToDecideToPopup ha expirado el monitor ha terminado su trabajo.
Los componentes utilizados en la aplicación 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 acción 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 métodos y constructores más utilizados de
JProgressBar. Otros métodos interesantes están definidos por las clases JComponent y
Component.
Seleccionar u Obtener los Valores/Restricciones de la Barra de Progreso
Método
Propósito
void setValue(int)
int getValue()
Selecciona u obtiene el valor actual de la barra de progreso.
El valor está limitado por los valores máximo y mínimo.
double getPercentComplete()
Obtiene el porcentaje terminado por la barra de progreso.
void setMinimum(int)
Selecciona u obtiene el valor mínimo de la barra de progreso.
int getMinimum()
void setMaximum(int)
Selecciona u obtiene el valor máximo de la barra de
progreso.
int getMaximum()
void
setModel(BoundedRangeModel)
BoundedRangeModel
getMaximum()
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 método como
alternativa a utilizar los métodos de selección u obtención
individuales listados arriba.
Ajuste de la Apariencia de la Barra de Progreso
Método
void setOrientation(int)
int getOrientation()
Propósito
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)
boolean
isStringPainted()
Selecciona u obtiene si la barra de progreso tiene borde.
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)
String getString()
Selecciona u obtiene la cadena de porcentaje.