Foros del Web » Programación para mayores de 30 ;) » Java »

Barra de Progreso

Estas en el tema de Barra de Progreso en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 02/08/2006, 08:59
 
Fecha de Ingreso: julio-2006
Ubicación: Argentina
Mensajes: 14
Antigüedad: 17 años, 9 meses
Puntos: 0
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................
  #2 (permalink)  
Antiguo 02/08/2006, 12:00
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 20 años
Puntos: 2
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
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:15.