Ver Mensaje Individual
  #14 (permalink)  
Antiguo 04/01/2012, 12:18
Avatar de pcarvajal
pcarvajal
 
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 10 meses
Puntos: 8
Respuesta: Hilos con Swing

Muchas gracias por el ejemplo.

Lo modifiqué un poco para que se ajustara a lo que necesito hacer, pero tengo solo un par de inconvenientes:

1. Necesito que no se inicie automaticamente, sino que se inicie en forma individual. Le agruegué dos botones para esto, pero no supe como hacerlo para hecharlos a andar individualmente.

2. Como puedo hacer para que los numeros del jtexfield1 se vayan desplegando en distintos colores?
(osea, el primero verde, el segundo azul y asi sucesivamente)

3. Como puedo darle la ubicacion y posicion en el formulario a los jtextfield y a los botones? Intenté darle ancho y alto al formulario, a los campo de texto y a los botones en el initComponents con la propiedad setBounds pero no se me reflejaban los cambios al compilar.

Este es el codigo:

Código:
package org;
 
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
 
public class JApp extends JFrame {
 
    private JTextField jTextField1, jTextField2;
    private Threads Thread1, Thread2;
    int aleatorio = 0;
    
    public JApp() {
        initComponents();
    }
 
    private void initComponents() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.FlowLayout());
        jTextField1 = new javax.swing.JTextField("1000");
        jTextField2 = new javax.swing.JTextField("1000");
        getContentPane().add(jTextField1);
        getContentPane().add(jTextField2);
        jTextField1.setEditable(false);
        jTextField2.setEditable(false);

  

        
        JButton button = new JButton("Pausa 1");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (Thread1.isPaused()) {
                    Thread1.resume();
                } else {
                    Thread1.pause();
                }
            }
        });
        getContentPane().add(button);
 
        JButton button2 = new JButton("Pausa 2");
        button2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (Thread2.isPaused2()) {
                    Thread2.resume();
                } else {
                    Thread2.pause();
                }
            }
        });
        getContentPane().add(button2);
  
        JButton button3 = new JButton("Iniciar 1");
        button3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //realizar pregunta para saber si hilo1 esta corriendo, si no está corriendo, darle start
            }
        });
        getContentPane().add(button3);
        
        JButton button4 = new JButton("Iniciar 2");
        button4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //realizar pregunta para saber si hilo2 esta corriendo, si no está corriendo, darle start
            }
        });
        getContentPane().add(button4);
        
        
        JButton button5 = new JButton("Parar 1");
        button5.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Thread1.stop();
            }
        });
        getContentPane().add(button5);  
     
         JButton button6 = new JButton("Parar 2");
        button6.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                 Thread2.stop();
            }
        });
        getContentPane().add(button6);  
        
        
        pack();
 
       Thread1 = new Threads(this);
       Thread2 = new Threads(this);
       new Thread(Thread1).start();
       new Thread(Thread2).start();
    }
 
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        jTextField1.setText(String.valueOf(Thread1.get()));
        jTextField2.setText(String.valueOf(Thread2.get()));
    }
 
    @Override
    public void dispose() {
        Thread1.stop();
        Thread2.stop();
        super.dispose();
    }
 
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JApp().setVisible(true);
            }
        });
    }
 
    private class Threads implements Runnable {
        private AtomicBoolean running = new AtomicBoolean(true);
        private AtomicInteger value = new AtomicInteger(0);
        private AtomicBoolean pause = new AtomicBoolean(false);
        private JFrame frame;
        public Threads(JFrame frame) {
            this.frame = frame;
        }
        @Override
        public void run() {
            try {
                while (running.get()) {
                    if (pause.get()) {
                        synchronized(this) {
                            wait();
                        }
                    }
                    aleatorio = (int) (Math.random ()* 10000);
                    value.set(aleatorio);
                    frame.repaint();
                    Thread.sleep(1000);
                }
            } catch (InterruptedException ex) {
                System.err.println(ex);
            }
        }
        
         public void start() {
            new Thread(Thread1).start();
        }
      
        public void stop() {
            running.set(false);
            if (isPaused()) resume();
        }
        public void pause() {
            pause.set(true);
        }
        public boolean isPaused() {
            return pause.get();
        }
        public void resume() {
            pause.set(false);
            synchronized(this) {
                notify();
            }
        }
        public Integer get() {
            return value.get();
        }
        ///////////////////////////////////////////////////////////
        public void pause2() {
            pause.set(true);
        }
        public boolean isPaused2() {
            return pause.get();
        }        
        
        public void stop2() {
            running.set(false);
            if (isPaused2()) resume2();
        }
        public void resume2() {
            pause.set(false);
            synchronized(this) {
                notify();
            }
        }
    }
 
}