Barra de Progreso en JFrame

rmarmol80
27 de Junio del 2008
Saludos a todos y gracias de antemano por la ayuda que me habeis prestado en el foro. Me gustaría colocar una barra de progreso, progressMonitor, mientras se realizan otras tareas. El problema surge cuando arranco el hilo de la barra he intento, como ejemplo, imprimir por pantalla varias lineas simulando otra tarea. Pues hasta que no deja de imprimir todas las líneas no arranca el hilo. Os coloco el código por si alguien me puede ayudar.
Muchas gracias.
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;

public class VentanaProgreso extends JFrame {
private Container panelPrincipal = null;
private JButton botonEmpezar, botonParar;
private JTextField campoEntrada, campoResultado;
private ProgressMonitor pMonitor = null;
private Timer reloj = null;

private int suma,contador;

public VentanaProgreso() {
suma = contador = 0;
setDefaultCloseOperation(EXIT_ON_CLOSE);

setSize(400,100);

// 1. Añadimos un grid layout al panel principal
panelPrincipal = this.getContentPane();
panelPrincipal.setLayout(new GridLayout(2,1));

// 2. añadimos una caja horizontal al gridlayout
Box caja = Box.createHorizontalBox();
panelPrincipal.add(caja);

// 3. Rellenamos la caja horizontal
caja.add(Box.createHorizontalGlue());
JLabel etiq1 = new JLabel("Suma del 1 al ", JLabel.LEFT);
etiq1.setFont(new Font("Dialog", Font.PLAIN, 15));
caja.add(etiq1);

campoEntrada = new JTextField("100", 4);
caja.add(campoEntrada);

JLabel etiq2 = new JLabel(" Resultado: ", JLabel.LEFT);
etiq2.setFont(new Font("Dialog", Font.PLAIN, 15));
caja.add(etiq2);

campoResultado = new JTextField(10);
caja.add(campoResultado);
caja.add(Box.createHorizontalGlue());

// 4. Otra caja horizontal

Box caja2 = Box.createHorizontalBox();
panelPrincipal.add(caja2);

// 5. Botones de empezar y acabar

botonEmpezar = new JButton("Empezar");
botonEmpezar.addActionListener(new EscuchaBoton());
caja2.add(Box.createHorizontalGlue());
caja2.add(botonEmpezar);
caja2.add(Box.createHorizontalGlue());

// botón para parar la suma
botonParar = new JButton("Parar");
botonParar.addActionListener(new EscuchaBoton());
caja2.add(Box.createHorizontalGlue());
caja2.add(botonParar);
caja2.add(Box.createHorizontalGlue());

// 6. creamos un reloj
// el primer parámetros es el núm. de milisegundos
// que pasa entre cada llamada a la escucha
// 10 significa llamar constantemente
reloj = new Timer(10, new EscuchaReloj());
}

// 7. Aquí se hace todo

class EscuchaReloj implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (Integer.parseInt(campoEntrada.getText())> 0){
contador++;
suma += contador;
pMonitor.setProgress(contador);
pMonitor.setNote("Sumando " + contador);
campoResultado.setText(Integer.toString(suma));
}
else {
campoResultado.setText("0");
}

if (contador >= Integer.parseInt(campoEntrada.getText())){
reloj.stop();
botonEmpezar.setEnabled(true);
}
}
}

// 8. Escucha de los botones

class EscuchaBoton implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();

if (button.getText() == "Empezar") {
botonEmpezar.setEnabled(false);

//9. Crear una barra de progreso
pMonitor = new ProgressMonitor(panelPrincipal,
"suma en progreso...",
"Nota", 0, 100);

// tiempo que pasa hasta que se muestra en ms
// si no se pone no aparece la barra de progreso
pMonitor.setMillisToPopup( 0 );

campoResultado.setText("");
if (campoEntrada.getText() != " ") {
// tamaño de la barra
pMonitor.setMaximum(Integer.parseInt(
campoEntrada.getText()));
suma = contador = 0;
// empezar a utilizar el reloj
reloj.start();


}
}
else if (button.getText() == "Parar") {
botonEmpezar.setEnabled(true);
// paramos el reloj y cerramos el monitor
reloj.stop();
pMonitor.close();
campoResultado.setText("");
suma = contador = 0;
}
}
}
}



public class Principal extends javax.swing.JFrame {
// private JFrame ventana;

/** Creates new form Principal */
public Principal() {
initComponents();

}



/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jButton1.setText("Iniciar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

jButton2.setText("Parar");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(26, 26, 26)
.addComponent(jButton1)
.addGap(18, 18, 18)
.addComponent(jButton2)
.addContainerGap(24, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(77, 77, 77)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addContainerGap(20, Short.MAX_VALUE))
);

pack();
}// </editor-fold>

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
/* JFrame ventana = new JFrame();
PanelProgreso progress = new PanelProgreso();
ventana.getContentPane().add(progress, BorderLayout.CENTER);
ventana.setSize(400, 150);
ventana.setVisible(true);
ventana.setEnabled(true);
* */
VentanaProgreso ventana = new VentanaProgreso();
ventana.setVisible(true);
for(int i=0;i<10000;i++){
System.out.println("Se imprime.....ded.e.d.ed.e.");
}




}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Principal().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
// End of variables declaration

}