import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Pista extends JFrame{
private Cuadro[] cuadricula;
private JButton iniciar;
private JButton detener;
private Activar activarPista;
public Pista() {
super("Pista Baile");
cuadricula = new Cuadro[100];
iniciar = new JButton("Iniciar");
iniciar.addActionListener(new AccionIniciar());
detener = new JButton("Detener");
detener.setEnabled(false);
detener.addActionListener(new AccionDetener());
JPanel pnPrincipal = new JPanel();
pnPrincipal.setLayout(new BorderLayout());
JPanel pnCuadricula = new JPanel();
pnCuadricula.setLayout(new GridLayout(10, 10, 2, 2));
for (int i = 0; i < cuadricula.length; i++) {
cuadricula[i] = new Cuadro();
pnCuadricula.add(cuadricula[i]);
}
JPanel pnBotones = new JPanel();
pnBotones.add(iniciar);
pnBotones.add(detener);
pnPrincipal.add(pnCuadricula, BorderLayout.CENTER);
pnPrincipal.add(pnBotones, BorderLayout.SOUTH);
setContentPane(pnPrincipal);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(
new Runnable() {
public void run() { new Pista();}
});
}
/*
* Clase para lanzar hilo ejecucion que pone en marcha
* la "pista de baile"
*/
class Activar extends Thread {
@Override
public void run() {
while(!Thread.currentThread().isInterrupted()) {
int i = (int) (Math.random()*cuadricula.length); //Generamos indice al azar para acceder al arreglo
cuadricula[i].repaint();
try {
sleep(10); //Pequeña pausa entre cada "repintado"
} catch (InterruptedException e) {
interrupt();
}
}
}
}
/*
* Panel cuadrado que se "apaga" o "enciende" al azar
*/
class Cuadro extends JPanel {
public Cuadro() {
setPreferredSize(new Dimension(50, 50));
setBackground(cambiaColor());
}
private Color cambiaColor() {
int azar = (int) (Math.random()*100);
if (azar%2 == 0)
return Color.BLACK;
else
return Color.YELLOW;
}
@Override
public void paint(Graphics g) {
super.paint(g);
setBackground(cambiaColor());
}
}
class AccionIniciar implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
activarPista = new Activar(); //Creamos nuevo Hilo
activarPista.start(); //Lo ponemos en marcha
detener.setEnabled(true);
iniciar.setEnabled(false);
}
}
class AccionDetener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
activarPista.interrupt(); //Finalizamos hilo
detener.setEnabled(false);
iniciar.setEnabled(true);
}
}
}