Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   Barra de Progreso (http://www.forosdelweb.com/f45/barra-progreso-414029/)

nloyola 02/08/2006 08:59

Barra de Progreso
 
Hola, un saludos para todos.
Tengo una clase que al ejecutarla, tarda mucho tiempo en terminar.
Es por esto que quiero usar una barra de progreso. Leyendo en la Web
encontre un ejemplo que mueve una barra, con un proceso sumarizando
hasta 1000 un contador. No me doy cuenta en que lugar tengo que poner
la clase a ejecutar, que se llama "CalculoProme". Va Ejemplo:

public class EMcorroproc extends JPanel {
Thread hilo;
Object objeto = new Object();
boolean pideParar = false;
JTextField texto;
JProgressBar barra;

public EMcorroproc() {
setLayout( new BorderLayout() );

texto = new JTextField();
add( texto,BorderLayout.NORTH );

JPanel panelInferior = new JPanel();
barra = new JProgressBar();
panelInferior.setLayout( new GridLayout(0,1) );
panelInferior.add( barra );
panelInferior.add( new JLabel( "Presione Arrancar..." ) );

JPanel panelBotones = new JPanel();
JButton botonArranque = new JButton( "Arrancar" );
botonArranque.setBackground( SystemColor.control );
panelBotones.add( botonArranque );
botonArranque.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent evt ) {
iniciaCuenta();
}
} );

JButton botonParar = new JButton( "Parar" );
botonParar.setBackground( SystemColor.control );
panelBotones.add( botonParar );
botonParar.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent evt ) {
detieneCuenta();
}
} );

panelInferior.add( panelBotones );
add( panelInferior,BorderLayout.SOUTH );
}

public void iniciaCuenta() {
if( hilo == null ) {
hilo = new ThreadCarga();
pideParar = false;
hilo.start();
}
}

public void detieneCuenta() {
synchronized( objeto ) {
pideParar = true;
objeto.notify();
}
}


class ThreadCarga extends Thread {
public void run() {
int min = 0;
int max = 100;

barra.setValue( min );
barra.setMinimum( min );
barra.setMaximum( max );

for (int i=min; i <= max; i++ ) {
barra.setValue( i ); ACA MUEVE LA BARRA
texto.setText( ""+i ); MUESTA LA SUMA
synchronized( objeto ) {
if( pideParar )
break;
try {
objeto.wait( 100 );
} catch( InterruptedException e ) {
// Se ignoran las excepciones
}
}
}
hilo = null;
}
}

public static void main( String args[] ) {
JFrame frame = new JFrame( "Tutorial de Java, Swing" );

frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent evt ) {
System.exit( 0 );
}
});

frame.getContentPane().add( new EMcorroproc(),BorderLayout.CENTER );
frame.setSize( 400,150 );
frame.setVisible( true );
}
}

GRACIAS AMIGOS................

Farookh_Bulsara 02/08/2006 12:00

bueno a simplemente veo 2 errores
tu calse ThreadCarga no implementa el runnable para poder usar el metodo run ,esta haciendo una clase del Hilo ,la verdad nose si funciona o no ,nunca hice la prueba,pero seria conveniendo q tu main este en otra clase q no sea ThreadCarga
Mejor haste una clase Presentacion y ahi pones el main y llamas a una clase q extienda de un jwindow y ahi pones este metodo:
public void ejecutarProsgresBar(){
try{
for (int i = 1; i<=100; i++){

Thread.sleep(15);//hacemos q la barra de progreso avance poco a poco
barra.setValue(i);//al terminar de cargar la barra se cierre el jwindow (barra es un objeto de JProgressBar)

}
} catch(Exception err){
}
}
y despues de ejecutar la barra llamas a tu clase q extiende de jframe
,es solo un ejemplo ,la verdad hay muchas formas de hacerlo


La zona horaria es GMT -6. Ahora son las 22:41.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.