/*** ESTA CLASE SE UTILIZA PARA MOSTRAR EN PANTALLA LA SIMULACION DEL
* MOVIMIENTO DE LOS PORCESOS, SE USA UNA MATRIZ DE OBJETOS JTextField's
* PARA SIMULAR LOS PROCESOS Y SUS RESPECTIVOS ESTADOS */
import java.awt.Color;
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.JOptionPane;
import javax.swing.JPanel;
public class Simulador extends JFrame implements ActionListener{
private JButton Cuadricula[][]=new JButton[30][25];
private JPanel PanelContenedor=new JPanel();
private int NumProceso=0;
private int NumProceso1=0;
private int orden=0,orden1=0;;
/*CONSTRUCTOR*/
public Simulador(){
PanelContenedor.setLayout(new GridLayout(30,25,0,0));
NumProceso1=NumProceso;
for(int i=0;i<30;i++){
for (int j=0;j<25;j++){
Cuadricula[i][j]=new JButton("");
Cuadricula[i][j].setVisible(false);
PanelContenedor.add(Cuadricula[i][j]);
if (i==8 && j==8){
Cuadricula[i][j].setText("L");
Cuadricula[i][j].setToolTipText("Estado LISTO");
Cuadricula[i][j].setVisible(true);
}
if (i==8 && j==17){
Cuadricula[i][j].setText("E");
Cuadricula[i][j].setToolTipText("Estado EJECUCION");
Cuadricula[i][j].setVisible(true);
}
if (i==0 && j==0){
Cuadricula[i][j].setText("N");
Cuadricula[i][j].setToolTipText("Estado NUEVO");
Cuadricula[i][j].setVisible(true);
}
if (i==0 && j==24){
Cuadricula[i][j].setText("T");
Cuadricula[i][j].setToolTipText("Estado TERMINADO");
Cuadricula[i][j].setVisible(true);
}
}/*Termina FOR*/
}/*Termina FOR*/
getContentPane().add(PanelContenedor);
setSize(1000,800);
setResizable(true);
setVisible(true);
}/*FIN CONSTRUCTOR*/
/*MOVIENDO EL PROCESO DESDE EL ESTADO DE LISTO HASTA EL ESTADO DE EJECUCION
* SE RECIBE EN limite EL NUMERO DEL PROCESO QUE ES EQUIVALENTE A SU NOMBRE*/
public void Listo_Ejecucion(int limite){
Cuadricula[7+limite][1].setVisible(false);
Color fondo=Cuadricula[7+limite][1].getBackground();
for(int i=8;i<=17;i++){
Cuadricula[7][i].setText(String.valueOf(limite));
Cuadricula[7][i].setBackground(fondo);
Cuadricula[7][i].setVisible(true);
Cuadricula[7][i-1].setVisible(false);
try {Thread.sleep(100);}
catch (InterruptedException e){e.printStackTrace();}
}
}/*FIN Listo_Ejecucion*/
/*MOVIENDOEL PROCESO DESDE ESTADO DE EJECUCION HASTA EL ESTADO DE LISTO, SE DEVUELVE EL COLOR
* DE FONDO PARA QUE SE PUEDA UTILIZAR EN LOS DEMAS MOVIMIENTOS, limite EQUIVALE AL NUMERO
* DEL PROCESO QUE SE ENCUENTRA EN MOVIMIENTO*/
public Color Ejecucion_Listo(int limite){
Cuadricula[7][17].setVisible(false);
Cuadricula[7+limite][1].setVisible(false);
Color fondo=Cuadricula[7+limite][1].getBackground();
for(int i=17;i>=8;i--){
Cuadricula[9][i].setText(String.valueOf(limite));
Cuadricula[9][i].setBackground(fondo);
Cuadricula[9][i].setVisible(true);
Cuadricula[9][i+1].setVisible(false);
try {Thread.sleep(100);}
catch (InterruptedException e){e.printStackTrace();}
}
Cuadricula[7][8].setVisible(false);
Cuadricula[9][8].setVisible(false);
return(Cuadricula[7][8].getBackground());
}/*FIN Ejecucion_Listo*/
/*COLOCANDO LOS PROCESOS QUE SE ENCUENTRAN EN EL ESTADO LISTO, EN LA COLA RESPECTIVA
* limite EQUIVALE EL NUMERO DE PROCESO*/
public void Listo_Cola1(Color fondo,int limite){
Cuadricula[7][8].setVisible(false);
orden++;
for(int i=7;i>=1;i--){
if (i>1){
Cuadricula[8][i].setText(""+limite);
Cuadricula[8][i].setBackground(fondo);
Cuadricula[8][i].setVisible(true);
}
if(i!=7)
Cuadricula[8][i+1].setVisible(false);
try {Thread.sleep(100);}
catch (InterruptedException e){e.printStackTrace();}
}
/*EL SWITCH NOS AYUDA A COLOCAR LOS PROCESOS EN SUS POSICIONES RESPECTIVAS DENTRO DE LA COLA
*limite ES IGUAL AL NUMERO DEL PROCESO, Y TAMBIEN EL NUMERO DE POSICION EN RENGLONES DE
*LA CUADRICULA (LA COLA LISTO)*/
switch(limite)
{
case 1:
Cuadricula[8][1].setText(""+limite);
Cuadricula[8][1].setBackground(fondo);
Cuadricula[8][1].setVisible(true);
break;
case 2:
Cuadricula[9][1].setText(""+limite);
Cuadricula[9][1].setBackground(fondo);
Cuadricula[9][1].setVisible(true);
break;
case 3:
Cuadricula[10][1].setText(""+limite);
Cuadricula[10][1].setBackground(fondo);
Cuadricula[10][1].setVisible(true);
break;
case 4:
Cuadricula[11][1].setText(""+limite);
Cuadricula[11][1].setBackground(fondo);
Cuadricula[11][1].setVisible(true);
break;
case 5:
Cuadricula[12][1].setText(""+limite);
Cuadricula[12][1].setBackground(fondo);
Cuadricula[12][1].setVisible(true);
break;
case 6:
Cuadricula[13][1].setText(""+limite);
Cuadricula[13][1].setBackground(fondo);
Cuadricula[13][1].setVisible(true);
break;
case 7:
Cuadricula[14][1].setText(""+limite);
Cuadricula[14][1].setBackground(fondo);
Cuadricula[14][1].setVisible(true);
break;
case 8:
Cuadricula[15][1].setText(""+limite);
Cuadricula[15][1].setBackground(fondo);
Cuadricula[15][1].setVisible(true);
break;
case 9:
Cuadricula[16][1].setText(""+limite);
Cuadricula[16][1].setBackground(fondo);
Cuadricula[16][1].setVisible(true);
break;
case 10:
Cuadricula[17][1].setText(""+limite);
Cuadricula[17][1].setBackground(fondo);
Cuadricula[17][1].setVisible(true);
break;
case 11:
Cuadricula[18][1].setText(""+limite);
Cuadricula[18][1].setBackground(fondo);
Cuadricula[18][1].setVisible(true);
break;
case 12:
Cuadricula[19][1].setText(""+limite);
Cuadricula[19][1].setBackground(fondo);
Cuadricula[19][1].setVisible(true);
break;
case 13:
Cuadricula[20][1].setText(""+limite);
Cuadricula[20][1].setBackground(fondo);
Cuadricula[20][1].setVisible(true);
break;
case 14:
Cuadricula[21][1].setText(""+limite);
Cuadricula[21][1].setBackground(fondo);
Cuadricula[21][1].setVisible(true);
break;
case 15:
Cuadricula[22][1].setText(""+limite);
Cuadricula[22][1].setBackground(fondo);
Cuadricula[22][1].setVisible(true);
break;
case 16:
Cuadricula[23][1].setText(""+limite);
Cuadricula[23][1].setBackground(fondo);
Cuadricula[23][1].setVisible(true);
break;
case 17:
Cuadricula[24][1].setText(""+limite);
Cuadricula[24][1].setBackground(fondo);
Cuadricula[24][1].setVisible(true);
break;
case 18:
Cuadricula[25][1].setText(""+limite);
Cuadricula[25][1].setBackground(fondo);
Cuadricula[25][1].setVisible(true);
break;
case 19:
Cuadricula[26][1].setText(""+limite);
Cuadricula[26][1].setBackground(fondo);
Cuadricula[26][1].setVisible(true);
break;
case 20:
Cuadricula[27][1].setText(""+limite);
Cuadricula[27][1].setBackground(fondo);
Cuadricula[27][1].setVisible(true);
break;
default:
JOptionPane.showMessageDialog(null,"Solo se soportan 20 procesos");
}/*FIN SWITCH*/
}/*FIN Listo_Cola1*/
/*MOVIENDO EL PROCESO ACTUAL EN EJECUCION DESDE EL ESTADO EJECUCION HASTA EL ESTADO DE TERMINADO
* limite ES IGUAL AL NUMERO DEL PROCESO*/
public void Ejecucion_Terminado(int limite){
orden1++;
NumProceso1++;
Color fondo=Cuadricula[7][17].getBackground();
/*HACIENDO EL RECORRIDO POR LA CUADRICULA*/
for(int i=7,j=6;i>=1;i--,j--){
Cuadricula[i][17].setText(""+limite);
Cuadricula[i][17].setBackground(fondo);
Cuadricula[i][17].setVisible(true);
try {
Thread.sleep(100);
Cuadricula[j+1][17].setVisible(false);
}
catch (InterruptedException e){e.printStackTrace();}
}
for(int i=17;i<25;i++){
Cuadricula[1][i].setText(""+limite);
Cuadricula[1][i].setBackground(fondo);
Cuadricula[1][i].setVisible(true);
Cuadricula[1][i-1].setVisible(false);
try {Thread.sleep(100);}
catch (InterruptedException e){e.printStackTrace();}
}
Cuadricula[1][24].setVisible(false);
/*EL SWITCH NOS AYUDA A COLOCAR LOS PROCESOS EN SUS POSICIONES RESPECTIVAS DENTRO DE LA COLA
*orden1 ES IGUAL AL NUMERO DEL PROCESO, Y TAMBIEN EL NUMERO DE POSICION EN RENGLONES DE
*LA CUADRICULA (LA COLA TERMINADO)*/
switch(orden1)
{
case 1:
Cuadricula[8][24].setText(String.valueOf(limite));
Cuadricula[8][24].setBackground(fondo);
Cuadricula[8][24].setVisible(true);
break;
case 2:
Cuadricula[9][24].setText(String.valueOf(limite));
Cuadricula[9][24].setBackground(fondo);
Cuadricula[9][24].setVisible(true);
break;
case 3:
Cuadricula[10][24].setText(String.valueOf(limite));
Cuadricula[10][24].setBackground(fondo);
Cuadricula[10][24].setVisible(true);
break;
case 4:
Cuadricula[11][24].setText(String.valueOf(limite));
Cuadricula[11][24].setBackground(fondo);
Cuadricula[11][24].setVisible(true);
break;
case 5:
Cuadricula[12][24].setText(String.valueOf(limite));
Cuadricula[12][24].setBackground(fondo);
Cuadricula[12][24].setVisible(true);
break;
case 6:
Cuadricula[13][24].setText(String.valueOf(limite));
Cuadricula[13][24].setBackground(fondo);
Cuadricula[13][24].setVisible(true);
break;
case 7:
Cuadricula[14][24].setText(String.valueOf(limite));
Cuadricula[14][24].setBackground(fondo);;
Cuadricula[14][24].setVisible(true);
break;
case 8:
Cuadricula[15][24].setText(String.valueOf(limite));
Cuadricula[15][24].setBackground(fondo);
Cuadricula[15][24].setVisible(true);
break;
case 9:
Cuadricula[16][24].setText(String.valueOf(limite));
Cuadricula[16][24].setBackground(fondo);
Cuadricula[16][24].setVisible(true);
break;
case 10:
Cuadricula[17][24].setText(String.valueOf(limite));
Cuadricula[17][24].setBackground(fondo);
Cuadricula[17][24].setVisible(true);
break;
case 11:
Cuadricula[18][24].setText(String.valueOf(limite));
Cuadricula[18][24].setBackground(fondo);
Cuadricula[18][24].setVisible(true);
break;
case 12:
Cuadricula[19][24].setText(String.valueOf(limite));
Cuadricula[19][24].setBackground(fondo);
Cuadricula[19][24].setVisible(true);
break;
case 13:
Cuadricula[20][24].setText(String.valueOf(limite));
Cuadricula[20][24].setBackground(fondo);
Cuadricula[20][24].setVisible(true);
break;
case 14:
Cuadricula[21][24].setText(String.valueOf(limite));
Cuadricula[21][24].setBackground(fondo);
Cuadricula[21][24].setVisible(true);
break;
case 15:
Cuadricula[22][24].setText(String.valueOf(limite));
Cuadricula[22][24].setBackground(fondo);
Cuadricula[22][24].setVisible(true);
break;
case 16:
Cuadricula[23][24].setText(String.valueOf(limite));
Cuadricula[23][24].setBackground(fondo);
Cuadricula[23][24].setVisible(true);
break;
case 17:
Cuadricula[24][24].setText(String.valueOf(limite));
Cuadricula[24][24].setBackground(fondo);
Cuadricula[24][24].setVisible(true);
break;
case 18:
Cuadricula[25][24].setText(String.valueOf(limite));
Cuadricula[25][24].setBackground(fondo);
Cuadricula[25][24].setVisible(true);
break;
case 19:
Cuadricula[26][24].setText(String.valueOf(limite));
Cuadricula[26][24].setBackground(fondo);
Cuadricula[26][24].setVisible(true);
break;
case 20:
Cuadricula[27][24].setText(String.valueOf(limite));
Cuadricula[27][24].setBackground(fondo);
Cuadricula[27][24].setVisible(true);
break;
default:
JOptionPane.showMessageDialog(null,"Solo se soportan 20 procesos");
}/*FIN SWITCH*/
}/*FIN Ejecucion_Terminado*/
/*MOVIENDO EL PROCESO DESDE EL ESTADO NUEVO HASTA EL ESTADO LISTO SE ENVIAN TRES PARAMETROS
* QUE PERTENECEN A LOS COMPONENTES DEL COLOR QUE TOMARA COMO FONDO EL BOTON QUE REPRESENTA AL
* PROCESO. no es necesario enviar el numero del proceso, batsa con el contador NumProceso,pues
* con solo irse encrementando de 1 en 1 es mas que suficiente para definir el numero o nombre
* del nuevo proceso creado */
public void Nuevo_Listo(int red, int green,int blue){
NumProceso++;/*numero de los procesos*/
for(int i=1;i<8;i++){
Cuadricula[1][i].setText(""+NumProceso);
Cuadricula[1][i].setBackground(new Color(red,green,blue));
Cuadricula[1][i].setVisible(true);
Cuadricula[1][i-1].setVisible(false);
try {Thread.sleep(100);}
catch (InterruptedException e){e.printStackTrace();}
}
Cuadricula[1][7].setVisible(false);
for(int i=1;i<8;i++){
Cuadricula[i][8].setText(""+NumProceso);
Cuadricula[i][8].setBackground(new Color(red,green,blue));
Cuadricula[i][8].setVisible(true);
Cuadricula[i-1][8].setVisible(false);
try {Thread.sleep(100);}
catch (InterruptedException e){e.printStackTrace();}
}
Cuadricula[7][8].setVisible(false);
}/*Fin Nuevo_Listo*/
/*MOVIENDO LOS PROCESOS DESDE EL ESTADO LISTO A LA COLA DE ESPERA, ESTA FUNCION SE EJECUTA CUANDO
* LOS PROCESOS APENAS HAN SIDO CREADOS*/
public void Listo_Cola(int red, int green,int blue){
orden++;
for(int i=7;i>=1;i--){
if (i>1){
Cuadricula[8][i].setText(""+NumProceso);
Cuadricula[8][i].setBackground(new Color(red,green,blue));
Cuadricula[8][i].setVisible(true);
}
if(i!=7)
Cuadricula[8][i+1].setVisible(false);
try {Thread.sleep(100);}
catch (InterruptedException e){e.printStackTrace();}
}
switch(orden)
{
case 1:
Cuadricula[8][1].setText(""+NumProceso);
Cuadricula[8][1].setBackground(new Color(red,green,blue));
Cuadricula[8][1].setVisible(true);
break;
case 2:
Cuadricula[9][1].setText(""+NumProceso);
Cuadricula[9][1].setBackground(new Color(red,green,blue));
Cuadricula[9][1].setVisible(true);
break;
case 3:
Cuadricula[10][1].setText(""+NumProceso);
Cuadricula[10][1].setBackground(new Color(red,green,blue));
Cuadricula[10][1].setVisible(true);
break;
case 4:
Cuadricula[11][1].setText(""+NumProceso);
Cuadricula[11][1].setBackground(new Color(red,green,blue));
Cuadricula[11][1].setVisible(true);
break;
case 5:
Cuadricula[12][1].setText(""+NumProceso);
Cuadricula[12][1].setBackground(new Color(red,green,blue));
Cuadricula[12][1].setVisible(true);
break;
case 6:
Cuadricula[13][1].setText(""+NumProceso);
Cuadricula[13][1].setBackground(new Color(red,green,blue));
Cuadricula[13][1].setVisible(true);
break;
case 7:
Cuadricula[14][1].setText(""+NumProceso);
Cuadricula[14][1].setBackground(new Color(red,green,blue));
Cuadricula[14][1].setVisible(true);
break;
case 8:
Cuadricula[15][1].setText(""+NumProceso);
Cuadricula[15][1].setBackground(new Color(red,green,blue));
Cuadricula[15][1].setVisible(true);
break;
case 9:
Cuadricula[16][1].setText(""+NumProceso);
Cuadricula[16][1].setBackground(new Color(red,green,blue));
Cuadricula[16][1].setVisible(true);
break;
case 10:
Cuadricula[17][1].setText(""+NumProceso);
Cuadricula[17][1].setBackground(new Color(red,green,blue));
Cuadricula[17][1].setVisible(true);
break;
case 11:
Cuadricula[18][1].setText(""+NumProceso);
Cuadricula[18][1].setBackground(new Color(red,green,blue));
Cuadricula[18][1].setVisible(true);
break;
case 12:
Cuadricula[19][1].setText(""+NumProceso);
Cuadricula[19][1].setBackground(new Color(red,green,blue));
Cuadricula[19][1].setVisible(true);
break;
case 13:
Cuadricula[20][1].setText(""+NumProceso);
Cuadricula[20][1].setBackground(new Color(red,green,blue));
Cuadricula[20][1].setVisible(true);
break;
case 14:
Cuadricula[21][1].setText(""+NumProceso);
Cuadricula[21][1].setBackground(new Color(red,green,blue));
Cuadricula[21][1].setVisible(true);
break;
case 15:
Cuadricula[22][1].setText(""+NumProceso);
Cuadricula[22][1].setBackground(new Color(red,green,blue));
Cuadricula[22][1].setVisible(true);
break;
case 16:
Cuadricula[23][1].setText(""+NumProceso);
Cuadricula[23][1].setBackground(new Color(red,green,blue));
Cuadricula[23][1].setVisible(true);
break;
case 17:
Cuadricula[24][1].setText(""+NumProceso);
Cuadricula[24][1].setBackground(new Color(red,green,blue));
Cuadricula[24][1].setVisible(true);
break;
case 18:
Cuadricula[25][1].setText(""+NumProceso);
Cuadricula[25][1].setBackground(new Color(red,green,blue));
Cuadricula[25][1].setVisible(true);
break;
case 19:
Cuadricula[26][1].setText(""+NumProceso);
Cuadricula[26][1].setBackground(new Color(red,green,blue));
Cuadricula[26][1].setVisible(true);
break;
case 20:
Cuadricula[27][1].setText(""+NumProceso);
Cuadricula[27][1].setBackground(new Color(red,green,blue));
Cuadricula[27][1].setVisible(true);
break;
default:
JOptionPane.showMessageDialog(null,"Solo se soportan 20 procesos");
}/*FIN SWITCH*/
}/*FIN Listo_Cola*/
public void actionPerformed(ActionEvent arg0) {
for(int i=0;i<25;i++){
for (int j=0;j<25;j++){
if (arg0.getSource().equals(Cuadricula[i][j])) {
}
}
}
}
}/*FIN DE LA CLAS Simulador*/
Clase Simulador
Publicado por Darwin Sosa Gómez el lunes, septiembre 10, 2007
Suscribirse a:
Enviar comentarios (Atom)
0 comentarios:
Publicar un comentario