import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class EjemploHilo extends JFrame {
    
    private JTextField campoTexto;
    private JButton miBoton;
    private JTextField campoTexto1;
    private JTextField campoTexto2;
    private Contador1 contador1;
    private Contador2 contador2;
 
    public EjemploHilo(){      
        super("Ejemplo Hilo");
        
        this.definirVentana();
        
        this.setSize(400, 100);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        this.setVisible(true);
        
        contador1 = new Contador1();
        contador2 = new Contador2();
        contador1.start();
        contador2.start();
    }    
    
    public void definirVentana() {
        campoTexto = new JTextField(10);
        campoTexto1 = new JTextField(3);
        campoTexto2 = new JTextField(3);
        miBoton = new JButton("Ok");
        campoTexto1.setEditable(false);
        this.setLayout(new FlowLayout());

        this.add(campoTexto);
        this.add(campoTexto1);
        this.add(campoTexto2);
        this.add(miBoton);
        miBoton.addActionListener((ActionListener) new Accion_del_Boton());
    }   
    
    private class Contador1 extends Thread {
        private int cuenta =0;
        
        @Override
        public void run(){
            while(true) {
                campoTexto1.setText(Integer.toString(cuenta++));
                try {
                    sleep(1000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(EjemploHilo.class.getName()).log(Level.SEVERE, null, ex);
                }
            }         
        }
    }
 
    private class Contador2 extends Thread {
        private int cuenta =0;
        
        @Override
        public void run(){
            while(true) {
                campoTexto2.setText(Integer.toString(cuenta+=2));
                try {
                    sleep(1000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(EjemploHilo.class.getName()).log(Level.SEVERE, null, ex);
                }
            }         
        }
    }
    
    private class Accion_del_Boton implements ActionListener{

        public void actionPerformed(ActionEvent arg0) {
            javax.swing.JOptionPane.showMessageDialog(null, campoTexto.getText());
        }   
    }
    
    static public void main(String args[]) {
        new EjemploHilo();
    }
}
