Suggested case list:
Using timer to refresh a grid
383guest172.69.33.12125nk0uiMay 7, 2020 7:23:47 AMlinkuser model to move item to another listbox
120guest162.158.193.148d0n3krApr 2, 2020 5:28:28 AMlinkDisabled list item row passed to VM-1981
296fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:44 PMlinkDisabled list item row passed to VM-1981
295fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:16 PMlinkDisabled list item row passed to VM-1981
294fatih123160.83.36.13225nk0uiFeb 13, 2018 3:30:44 PMlinkgrid sample with ListModel/RowRenderer
816guest80.82.2.1312vah9ajFeb 21, 2017 11:42:21 AMlinkgrid sample with ListModel/RowRenderer
809guest175.98.113.1622vah9ajJan 26, 2017 9:19:33 AMlinkgrid sample with ListModel/RowRenderer
196guest79.185.142.402vah9ajApr 26, 2014 10:53:57 PMlinkgrid sample with ListModel/RowRenderer
195guest79.185.142.402vah9ajApr 26, 2014 10:53:54 PMlinkgrid sample with ListModel/RowRenderer
194guest79.185.142.402vah9ajApr 26, 2014 10:53:51 PMlinkgrid sample with ListModel/RowRenderer
193guest79.185.142.402vah9ajApr 26, 2014 10:53:48 PMlinkgrid sample with ListModel/RowRenderer
192guest79.185.142.402vah9ajApr 26, 2014 10:53:44 PMlinkgrid sample with ListModel/RowRenderer
191guest79.185.142.402vah9ajApr 26, 2014 10:53:40 PMlinkHierarchy table without using ZK PE/EE
1aaknai151.28.135.2131s871daJul 29, 2013 11:02:46 PMlinkgrid sample with ListModel/RowRenderer
128aaknai151.28.135.2132vah9ajJul 29, 2013 7:20:00 PMlinkuser model to move item to another listbox
1TonyQ114.25.109.94d0n3krApr 21, 2012 10:43:27 AMlinkUsing timer to refresh a grid
1TonyQ220.133.44.3725nk0uiFeb 17, 2012 3:17:34 AMlinkFire a event from child iframe
1TonyQ220.133.44.372eupjotFeb 3, 2012 5:04:52 AMlinkTextbox input restriction sample
1TonyQ72.21.245.2431b3nlr0Dec 20, 2011 10:09:10 AMlinkTest web core taglib in ZUL
1TonyQ198.203.175.175ofqkemDec 17, 2011 3:36:08 AMlinkLatest 10 Fiddles :
constraint binding textbox
3guest172.68.151.16220peldaDec 5, 2025 5:08:19 PMlinkAnother new ZK fiddle
2guest172.68.151.16320peldaDec 5, 2025 5:07:51 PMlinkAnother new ZK fiddle
1guest172.68.151.16220peldaDec 5, 2025 5:07:32 PMlinkAnother new ZK fiddle
1peggypeng172.71.154.99364f4neDec 5, 2025 9:24:31 AMlinktooltip example
2guest104.22.23.13rc1ntoDec 4, 2025 2:23:45 PMlinkAnother new ZK fiddle
1guest172.69.134.2277t7602Dec 4, 2025 1:40:46 PMlinkAnother new ZK fiddle
1peggypeng104.22.17.1802df6e3oDec 4, 2025 8:41:29 AMlinkonClose
1peggypeng172.68.87.248j8kd8aDec 3, 2025 4:10:26 AMlinkAnother new ZK fiddle
1peggypeng172.69.134.2271rm7f4eNov 26, 2025 3:31:24 AMlinkZK-5912-Suggestion
2rebeccalai104.22.20.1442qrmiiuNov 26, 2025 2:07:15 AMlinkAdministracion de Memoria - SO 2016 - Prof Edgar Escobar
1lordedumax190.200.180.1099blipuSep 18, 2016 7:23:18 PMlinkresources
index.zulzul<zk>
<style>
.letraProcesoEspacio {
transform: rotate(270deg);
position: absolute;
}
.letraProceso {
color: black;
font-size: medium;
position: relative;
top: -18px;
right: 35px;
}
.btn {
height: 30px;
background: #fff !important;
border: 1px solid;
border-radius: 5px;
}
.insertar {
border-color: #9B59B6;
color: #9B59B6;
}
.insertar:hover {
background: #9B59B6 !important;
color: #fff;
}
.continuar {
border-color: #2C3E50;
color: #2C3E50;
}
.continuar:hover {
background: #2C3E50 !important;
color: #fff;
}
.letra-medio {
font-size: medium;
}
.letra-grande {
font-size: x-large;
}
.letra-x-grande {
font-size: xx-large;
}
.formulario {
width: 90%;
margin: 0 auto;
}
.z-listheader {
background: #2980B9;
}
.z-listheader-content {
color: #fff;
text-align: center;
}
.z-listcell-content {
text-align: center;
}
.ingresar_proceso_box {
margin-right: 30px;
padding: 10px 20px;
background-color: rgb(242, 242, 242);
}
.mmu {
border: 5px solid rgb(41, 128, 185);
padding: 10px 30px;
}
.letra_mmu {
font-size: medium;
font-weight: bold;
color: #2980B9;
}
.plus_mmu {
font-size: x-large;
position: relative;
border: 1px solid;
border-radius: 50px;
padding: 0px 8px;
right: -3px;
}
.flecha {
width: 95px;
height: auto;
}
.popDiv {
position: relative;
right: -15px;
}
</style>
<div id="simulador" apply="pkg$.controladorSimulador" zclass="formulario">
<!-- TITULO -->
<div align="center">
<label value="Administración de memoria bajo el esquema de segmentación" zclass="letra-x-grande"/>
</div>
<separator spacing="20px"/>
<hbox>
<!-- INGRESAR PROCESOS -->
<div zclass="ingresar_proceso_box">
<vbox>
<div align="center">
<label value="Ingresar Proceso" zclass="letra-grande"/>
</div>
<label value="Nombre del proceso (ID):" zclass="letra-medio"/>
<textbox id="nombreProceso" maxlength="10" width="200px" onOK="tamannoProceso.focus()"/>
<label value="Tamaño del proceso (k):" zclass="letra-medio"/>
<intbox id="tamannoProceso" constraint="no zero, no negative" width="200px" onOK="tiempoProceso.focus()"/>
<label value="Tiempo del proceso (Rafaga):" zclass="letra-medio"/>
<intbox id="tiempoProceso" constraint="no zero, no negative" width="200px" onOK="insertarProceso.focus()"/>
<button label="Insertar" id="insertarProceso" zclass="btn insertar" width="200px"/>
<button label="Continuar" id="continuarProceso" zclass="btn continuar" width="200px"/>
</vbox>
</div>
<!-- MEMORIA PRINCIPAL - GRAFICO -->
<vbox>
<label value="Memoria Principal" zclass="letra-medio"/>
<div id="RAM">
<hbox spacing="0"/>
<popup/>
</div><separator spacing="22px"/>
<!-- MEMORIA VIRTUAL - GRAFICO -->
<label value="Memoria Virtual" zclass="letra-medio"/>
<div id="MVirtual">
<hbox spacing="0"/>
<popup/>
</div>
</vbox>
</hbox><separator spacing="20px"/>
<!-- TABLA SEGMENTACION -->
<vbox>
<div align="center">
<label value="Tabla de Segmentación" zclass="letra-grande"/>
</div>
<listbox id="tablaSegmentacion" emptyMessage="No hay procesos" width="1075px">
<listhead>
<listheader label="Id" />
<listheader label="Base" />
<listheader label="Limite" />
<listheader label="Ráfaga" />
<listheader label="Dirección" />
<listheader label="RAM" />
</listhead>
</listbox>
</vbox><separator spacing="40px"/>
<!-- TABLA MMU -->
<div align="center" width="1075px">
<label value="Tabla de MMU" zclass="letra-grande"/>
</div>
<hbox>
<listbox id="procesosMP" width="275px" emptyMessage="Ningun Proceso Trabajando" >
<listhead>
<listheader label="Procesos MP" />
<listheader label="Direccion Logica" />
</listhead>
<template name="model">
<listitem>
<listcell label="${each.id}" />
<listcell label="${each.direccion}"/>
</listitem>
</template>
</listbox>
<image src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Flecha_tesela.svg/1280px-Flecha_tesela.svg.png" zclass="flecha"/>
<image src="https://alssl.askleomedia.com/wp-content/uploads/2009/01/cpu.jpg" width="100px" height="auto"/>
<image src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Flecha_tesela.svg/1280px-Flecha_tesela.svg.png" zclass="flecha"/>
<div zclass="mmu">
<vbox>
<label value="MMU" zclass="letra_mmu"/>
<label value="+" zclass="plus_mmu letra_mmu"/>
<label value="5200" zclass="letra_mmu"/>
</vbox>
</div>
<image src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Flecha_tesela.svg/1280px-Flecha_tesela.svg.png" zclass="flecha"/>
<listbox id="procesosMPdirFis" width="275px" emptyMessage="Ningun Proceso Trabajando" >
<listhead>
<listheader label="Procesos MP" />
<listheader label="Direccion Fisica" />
</listhead>
<template name="model">
<listitem>
<listcell label="${each.id}" />
<listcell label="${each.direccion}"/>
</listitem>
</template>
</listbox>
</hbox>
</div>
</zk>
controladorSimulador.javajavaimport org.zkoss.zk.ui.*;
import org.zkoss.zk.ui.event.*;
import org.zkoss.zk.ui.util.*;
import org.zkoss.zk.ui.ext.*;
import org.zkoss.zk.au.*;
import org.zkoss.zk.au.out.*;
import org.zkoss.zul.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import pkg$.Espacio;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.Div;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listhead;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Textbox;
import pkg$.Simulador;
public class controladorSimulador extends SelectorComposer<Component>{
private static final long serialVersionUID = 1L;
private Simulador grafico = new Simulador();
@Wire
private Textbox nombreProceso;
@Wire
private Intbox tamannoProceso;
@Wire
private Intbox tiempoProceso;
@Wire
private Listbox tablaSegmentacion;
@Wire
private Listbox procesosMP;
@Wire
private Listbox procesosMPdirFis;
@Wire private Div RAM;
@Wire private Div MVirtual;
private int contMP;
private int contMV;
ArrayList<Espacio> listaProcesosMP = new ArrayList<Espacio>();
ArrayList<Espacio> ordenProcesosMP = new ArrayList<Espacio>();
ArrayList<Espacio> listaProcesosMV = new ArrayList<Espacio>();
ArrayList<Espacio> ordenProcesosMV = new ArrayList<Espacio>();
boolean ajustoMemoria=false;
boolean insertoMP=false;
boolean insertoMV=false;
int redireccionFisica;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
nombreProceso.setFocus(true);
redireccionFisica =5200;
contMP=0;
Espacio huecoInicial1= new Espacio("H"+contMP,50,0,0,0, true);
for(int i=0;i<huecoInicial1.getTamanno();i++)
listaProcesosMP.add(huecoInicial1);
contMV=0;
Espacio huecoInicial2= new Espacio("H"+contMV,200,0,0,0, true);
for(int i=0;i<huecoInicial2.getTamanno();i++) {
listaProcesosMV.add(huecoInicial2);
}
direccionesLogFis();
grafico.simularProcesos(RAM, listaProcesosMP, 1);
grafico.simularProcesos(MVirtual, listaProcesosMV, 0);
}
@Listen("onClick = #insertarProceso")
public void insertarProceso(){
if (validarCampos()) {
Espacio procesoEntrada= new Espacio();
procesoEntrada.setId(nombreProceso.getText().toUpperCase());
procesoEntrada.setTamanno(tamannoProceso.getValue());
procesoEntrada.setTiempo(tiempoProceso.getValue());
procesoEntrada.setTiempoOriginal(tiempoProceso.getValue());
procesoEntrada.setHueco(false);
if(ordenProcesosMP.size()!=0)
disminuir();
insertarMP(procesoEntrada);
if(insertoMP==false){
ajustoMemoria=false;
boolean llenaMV=false;
while(insertoMP==false && llenaMV==false){
int direccionLimpiar=ordenProcesosMP.get(0).getDireccion();
int tamannoLimpiar=ordenProcesosMP.get(0).getTamanno();
Espacio procesoEnviarMV=ordenProcesosMP.get(0);
insertarMV(procesoEnviarMV);
ajustoMemoria=false;
if(insertoMV==true){
incrementarCont(0);
Espacio hueco = new Espacio("H"+contMP,tamannoLimpiar,0,0,direccionLimpiar, true);
for(int d=direccionLimpiar;d<direccionLimpiar+tamannoLimpiar;d++)
listaProcesosMP.set(d, hueco);
ordenProcesosMP.remove(0);
insertarMP(procesoEntrada);
ajustoMemoria=false;
insertoMV=false;
}
else
llenaMV=true;
}
if(llenaMV==true)
JOptionPane.showMessageDialog(null,"No se pudo insertar el proceso de entrada "+procesoEntrada.getId()+" en la MP porque la MV no acepta mas procesos");
}
direccionesLogFis();
grafico.simularProcesos(RAM, listaProcesosMP, 1);
grafico.simularProcesos(MVirtual, listaProcesosMV, 0);
tablaSegmentacion();
ajustoMemoria=false;
insertoMP=false;
insertoMV=false;
limpiarCampos();
}
}//Fin del metodo insertarProceso
public void insertarMV(Espacio procesoEntrada){
int posicion=0;
while(posicion<listaProcesosMV.size() && insertoMV==false){
if(listaProcesosMV.get(posicion).isHueco()
&& procesoEntrada.getTamanno()<=listaProcesosMV.get(posicion).getTamanno()){
Espacio hueco=listaProcesosMV.get(posicion);
hueco.setDireccion(hueco.getDireccion()+procesoEntrada.getTamanno());
hueco.setTamanno(hueco.getTamanno()-procesoEntrada.getTamanno());
procesoEntrada.setDireccion(posicion);
for(int a=posicion;a<posicion+procesoEntrada.getTamanno();a++)
listaProcesosMV.set(a, procesoEntrada);
if(hueco.getTamanno()>0)
for(int b=hueco.getDireccion();b<hueco.getDireccion()+hueco.getTamanno();b++)
listaProcesosMV.set(b, hueco);
insertoMV=true;
ordenProcesosMV.add(procesoEntrada);
}
else{
posicion=listaProcesosMV.get(posicion).getDireccion()+listaProcesosMV.get(posicion).getTamanno();
}
}
if(ajustoMemoria==false && insertoMV==false){
condensarMemoria(1);
ajustoMemoria=true;
insertarMV(procesoEntrada);
}
}//Fin del metodo insertarMV
public void insertarMP(Espacio procesoEntrada){
if (validarIngresarMP(procesoEntrada) == false) {
int posicion=0;
while(posicion<listaProcesosMP.size() && insertoMP==false){
if(listaProcesosMP.get(posicion).isHueco()
&& procesoEntrada.getTamanno()<=listaProcesosMP.get(posicion).getTamanno()){
Espacio hueco=listaProcesosMP.get(posicion);
hueco.setDireccion(hueco.getDireccion()+procesoEntrada.getTamanno());
hueco.setTamanno(hueco.getTamanno()-procesoEntrada.getTamanno());
procesoEntrada.setDireccion(posicion);
for(int a=posicion;a<posicion+procesoEntrada.getTamanno();a++)
listaProcesosMP.set(a, procesoEntrada);
if(hueco.getTamanno()>0)
for(int b=hueco.getDireccion();b<hueco.getDireccion()+hueco.getTamanno();b++)
listaProcesosMP.set(b, hueco);
insertoMP=true;
ordenProcesosMP.add(procesoEntrada);
} else {
posicion=listaProcesosMP.get(posicion).getDireccion()+listaProcesosMP.get(posicion).getTamanno();
}
}
if(ajustoMemoria==false && insertoMP==false){
condensarMemoria(0);
ajustoMemoria=true;
insertarMP(procesoEntrada);
}
}
else{
insertoMP=true;
}
}//Fin del metodo insertarMP
@Listen("onClick = #continuarProceso")
public void continuarProceso(){
if(ordenProcesosMP.size()!=0)
disminuir();
if(ordenProcesosMV.size()!=0){
boolean llenaMP=false;
ajustoMemoria=false;
while(llenaMP==false && ordenProcesosMV.size()!=0){
int direccionLimpiar=ordenProcesosMV.get(0).getDireccion();
int tamannoLimpiar=ordenProcesosMV.get(0).getTamanno();
Espacio procesoEnviarMP= new Espacio();
procesoEnviarMP.setId(ordenProcesosMV.get(0).getId());
procesoEnviarMP.setTamanno(tamannoLimpiar);
procesoEnviarMP.setTiempo(ordenProcesosMV.get(0).getTiempo());
procesoEnviarMP.setTiempoOriginal(ordenProcesosMV.get(0).getTiempoOriginal());
procesoEnviarMP.setHueco(ordenProcesosMV.get(0).isHueco());
insertarMP(procesoEnviarMP);
if(insertoMP==true){
incrementarCont(1);
Espacio hueco = new Espacio("H"+contMV,tamannoLimpiar,0,0,direccionLimpiar, true);
for(int d=direccionLimpiar;d<direccionLimpiar+tamannoLimpiar;d++)
listaProcesosMV.set(d, hueco);
ordenProcesosMV.remove(0);
insertoMP=false;
}
else
llenaMP=true;
}
insertoMP=false;
ajustoMemoria=false;
}
direccionesLogFis();
grafico.simularProcesos(RAM, listaProcesosMP, 1);
grafico.simularProcesos(MVirtual, listaProcesosMV, 0);
tablaSegmentacion();
}//Fin del metodo continuarProceso
public void disminuir(){
int numP = ordenProcesosMP.size();
int posicion = 0;
for(int i=0;i<numP;i++){
Espacio verificarP=ordenProcesosMP.get(posicion);
verificarP.setTiempo(verificarP.getTiempo()-1);
if(verificarP.getTiempo()==0){
incrementarCont(0);
Espacio hueco=new Espacio("H"+contMP,verificarP.getTamanno(),0,0,verificarP.getDireccion(), true);
for(int d=verificarP.getDireccion();d<verificarP.getDireccion()+verificarP.getTamanno();d++)
listaProcesosMP.set(d, hueco);
ordenProcesosMP.remove(posicion);
solicitarProcesoMV();
}
else
posicion++;
}//Fin for
}//Fin del metodo disminuir
public void solicitarProcesoMV(){
if(ordenProcesosMV.size()!=0){
Espacio procesoEnviarMP=ordenProcesosMV.get(0);
int direccionLimpiar=ordenProcesosMV.get(0).getDireccion();
int tamannoLimpiar=ordenProcesosMV.get(0).getTamanno();
insertarMP(procesoEnviarMP);
if(insertoMP==true){
incrementarCont(1);
Espacio hueco = new Espacio("H"+contMV,tamannoLimpiar,0,0,direccionLimpiar, true);
for(int d=direccionLimpiar;d<direccionLimpiar+tamannoLimpiar;d++)
listaProcesosMV.set(d, hueco);
ordenProcesosMV.remove(0);
}
}
ajustoMemoria=false;
insertoMP=false;
}//Fin del metodo solicitarProcesoMV
public void condensarMemoria(int tipo){
ArrayList<Espacio> memoria;
if(tipo==0)
memoria= listaProcesosMP;
else
memoria=listaProcesosMV;
int posicion=0;
boolean estoyEnElUltimo=false;
while(posicion<memoria.size() && estoyEnElUltimo==false){
Espacio proceso=memoria.get(posicion);
if(proceso.getDireccion()+proceso.getTamanno()==memoria.size())
estoyEnElUltimo=true;
else{
Espacio procesoSig=memoria.get(proceso.getDireccion()+proceso.getTamanno());
if(proceso.isHueco() && procesoSig.isHueco()){
incrementarCont(tipo);
int num;
if(tipo==0)
num=contMP;
else
num=contMV;
Espacio hueco=new Espacio("H"+num,proceso.getTamanno()+procesoSig.getTamanno(),0,0,proceso.getDireccion(), true);
for(int d=hueco.getDireccion();d<hueco.getDireccion()+hueco.getTamanno();d++)
memoria.set(d, hueco);
}
else
posicion=proceso.getDireccion()+proceso.getTamanno();
}
}
}//Fin del metodo condensarMemoria
public void direccionesLogFis(){
procesosMP.setModel(new ListModelList<Espacio>(ordenProcesosMP));
ArrayList<Espacio> listadirFis = new ArrayList<Espacio>();
for(int i=0;i<ordenProcesosMP.size();i++){
Espacio proceso=new Espacio();
proceso.setId(ordenProcesosMP.get(i).getId());
proceso.setDireccion(ordenProcesosMP.get(i).getDireccion()+redireccionFisica);
proceso.setTamanno(ordenProcesosMP.get(i).getTamanno());
proceso.setTiempo(ordenProcesosMP.get(i).getTiempo());
proceso.setTiempoOriginal(ordenProcesosMP.get(i).getTiempoOriginal());
proceso.setHueco(ordenProcesosMP.get(i).isHueco());
listadirFis.add(proceso);
}
procesosMPdirFis.setModel(new ListModelList<Espacio>(listadirFis));
}//Fin del metodo direccionesLogFis
public void tablaSegmentacion() {
for (int i = 0; i < tablaSegmentacion.getChildren().size(); i++) {
if (!(tablaSegmentacion.getChildren().get(i) instanceof Listhead)) {
grafico.removerComponente(tablaSegmentacion.getChildren().get(i));
}
}
tablaSegmentacionMemoria(listaProcesosMP, 1);
tablaSegmentacionMemoria(listaProcesosMV, 0);
}//Fin del metodo tablaSegmentacion
private void tablaSegmentacionMemoria(ArrayList<Espacio> listaProceso, int ram) {
for(int i = 0; i < listaProceso.size();) {
Espacio proceso = listaProceso.get(i);
if(!proceso.isHueco()) {
Listitem listitem = new Listitem();
tablaSegmentacionProceso(listitem, proceso.getId());
tablaSegmentacionProceso(listitem, i + " k");
tablaSegmentacionProceso(listitem, grafico.calcularTamanoProceso(listaProceso, proceso) + " k");
tablaSegmentacionProceso(listitem, String.valueOf(proceso.getTiempoOriginal()));
tablaSegmentacionProceso(listitem, String.valueOf(proceso.getDireccion()));
tablaSegmentacionProceso(listitem, String.valueOf(ram));
tablaSegmentacion.appendChild(listitem);
}
i += grafico.calcularTamanoProceso(listaProceso, proceso);
}
}//Fin del metodo tablaSegmentacionMemoria
private void tablaSegmentacionProceso(Listitem listitem, String valor) {
Listcell listcell = new Listcell(valor);
listitem.appendChild(listcell);
}//Fin del metodo tablaSegmentacionProceso
private void incrementarCont(int i){
if(i==0){
contMP++;
if(contMP>50)
contMP=0;
}
else{
contMV++;
if(contMV>200)
contMV=0;
}
}//Fin del metodo incrementarCont
private void limpiarCampos() {
nombreProceso.setText("");
tamannoProceso.setText("");
tiempoProceso.setText("");
nombreProceso.setFocus(true);
}//Fin del metodo
private boolean validarCampos() {
if(nombreProceso.getText().trim().equals("")
|| tamannoProceso.getText().trim().equals("")
|| tiempoProceso.getText().trim().equals("")) {
JOptionPane.showMessageDialog(null, "Debe llenar todos los campos!");
return false;
}
return true;
}//Fin del metodo validarCampos
private boolean validarIngresarMP(Espacio procesoEntrada) {
boolean valor = false;
if (procesoEntrada.getTamanno() <= 50) {
for (Espacio pro : listaProcesosMP) {
if (pro.getId().equalsIgnoreCase(procesoEntrada.getId())) {
valor = true;
break;
}
}
if (valor == true) {
JOptionPane.showMessageDialog(null,"Proceso " + procesoEntrada.getId() + " esta en memoria");
}
}
else {
valor = true;
JOptionPane.showMessageDialog(null,"Proceso " + procesoEntrada.getId() + " excede la capacidad de la RAM");
}
return valor;
}//Fin del metodo validarIngresarMP
}//Fin del controladorSimulador
Espacio.javajava
public class Espacio {
private String id;
private int tamanno;
private int tiempo;
private int tiempoOriginal;
private int direccion;
private boolean hueco;
public Espacio() {
}
public Espacio(String id, int tamanno, int tiempo, int tiempoOriginal, int direccion, boolean hueco) {
super();
this.id = id;
this.tamanno = tamanno;
this.tiempo = tiempo;
this.tiempoOriginal = tiempoOriginal;
this.direccion = direccion;
this.hueco = hueco;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getTamanno() {
return tamanno;
}
public void setTamanno(int tamanno) {
this.tamanno = tamanno;
}
public int getTiempo() {
return tiempo;
}
public void setTiempo(int tiempo) {
this.tiempo = tiempo;
}
public int getTiempoOriginal() {
return tiempoOriginal;
}
public void setTiempoOriginal(int tiempoOriginal) {
this.tiempoOriginal = tiempoOriginal;
}
public int getDireccion() {
return direccion;
}
public void setDireccion(int direccion) {
this.direccion = direccion;
}
public boolean isHueco() {
return hueco;
}
public void setHueco(boolean hueco) {
this.hueco = hueco;
}
}
Simulador.javajavaimport org.zkoss.zk.ui.*;
import org.zkoss.zk.ui.event.*;
import org.zkoss.zk.ui.util.*;
import org.zkoss.zk.ui.ext.*;
import org.zkoss.zk.au.*;
import org.zkoss.zk.au.out.*;
import org.zkoss.zul.*;
import java.util.ArrayList;
import java.util.List;
import pkg$.Espacio;
import org.zkoss.zk.ui.Component;
import org.zkoss.zul.Div;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Popup;
import org.zkoss.zul.Vbox;
import org.zkoss.zul.Separator;
public class Simulador {
public void simularProcesos(Div memoria, ArrayList<Espacio> listaProcesos, int ram) {
Hbox hbox = (Hbox) memoria.getFirstChild();
removerComponente(hbox);
Popup pop = (Popup) memoria.getChildren().get(1);
removerComponente(pop);
String mem = (ram == 1) ? "Memoria Principal" : "Memoria Virtual";
Label memo = new Label(mem);
memo.setZclass("letra-medio");
pop.appendChild(memo);
for(int i = 0; i < listaProcesos.size();) {
Espacio pro = listaProcesos.get(i);
int tamano = calcularTamanoProceso(listaProcesos, pro);
String estilo = "height:100px;border: 1px solid black;width: ";
estilo += (ram == 1) ? tamano * 8 + "px;" : tamano * 4 + "px;";
estilo += (pro.isHueco()) ? colorHueco() : colorProceso();
Label proId = new Label(pro.getId() + " - " + pro.getTamanno() + " k");
proId.setZclass("letraProceso");
Vbox vbox = new Vbox();
vbox.appendChild(proId);
Div divAux = new Div();
divAux.setZclass("letraProcesoEspacio");
divAux.appendChild(vbox);
Div div = new Div();
div.setStyle(estilo);
Label popProcId = new Label(pro.getId());
Label popTamano = new Label("Tamaño: " + pro.getTamanno() + " k");
Label popRafagaOriginal = new Label("Rafaga: " + pro.getTiempoOriginal());
Label popRafaga = new Label("Falta: " + pro.getTiempo());
Vbox popVbox = new Vbox();
popVbox.appendChild(popTamano);
if (!pro.isHueco()) {
popVbox.appendChild(popRafagaOriginal);
popVbox.appendChild(popRafaga);
}
Div popDiv = new Div();
popDiv.setZclass("popDiv");
popDiv.appendChild(popVbox);
Separator separador = new Separator();
separador.setBar(true);
pop.appendChild(separador);
pop.appendChild(popProcId);
pop.appendChild(popDiv);
div.setPopup(pop);
div.appendChild(divAux);
hbox.appendChild(div);
i += tamano;
}
}
public int calcularTamanoProceso(ArrayList<Espacio> listaProcesos, Espacio proceso) {
int cont = 0;
for (Espacio pro : listaProcesos) {
if (proceso.getId().equals(pro.getId())) {
cont++;
}
}
return cont;
}
/*private void crearComponente(Component component) {
Selectors.wireComponents(component, this, false);
Selectors.wireEventListeners(component, this);
}*/
public void removerComponente(Component componente) {
List<Component> componentes = componente.getChildren();
for (int i = componentes.size() - 1; i >= 0; i--) {
componente.removeChild(componentes.get(i));
}
}
/*
* Paleta de colores para PROCESOS y HUECOS
* */
private String colorProceso() {
return "background: #C0392B;";
}
private String colorHueco() {
return "background: #cccccc;";
}
}