I'm trying to add a GUI to the predator-prey simulation. It can allow users to choose which simulation(species involved) they want to do, set the simulation field size they want, and show the progress of the simulation and result.
I asked a question before, and I kinda figure it out what caused the problem.
But now I encounter another question:
How do I let the simulation buttons use the same object method which generate button use, but also don't generate the field again?
As the code shown below,
(1)after I generate the field and press "Reset" button, it will generate the field again then reset simulation(show up a new field window with different data);
(2)after I generate the field and press "Next step" button, it will generate the field again then show next step simulation(show up a new field window and don't inherit the initial data I generate);
(3)after I generate the field and press "long run step" button, it will generate the field again then show next hundred step simulation result(show up a new field window and don't inherit the initial data I generate and don't show the progress);
private class ButtonHandler implements ActionListener{//Generate field
public void actionPerformed(ActionEvent e){
String depthstr = depthtxt.getText();
String widthstr = widthtxt.getText();
int depth = Integer.parseInt(depthstr);
int width = Integer.parseInt(widthstr);
switch(version) {//Different specices simulation choosed by user
case 0:
Simulator set = new Simulator();
set.Simulator(depth,width);
break;
case 1:
SimulatorRF setRF = new SimulatorRF();
setRF.SimulatorRF(depth,width);
break;
case 2:
SimulatorRW setRW = new SimulatorRW();
setRW.SimulatorRW(depth,width);
break;
...
case 25:
SimulatorFWBH setFWBH = new SimulatorFWBH();
setFWBH.SimulatorFWBH(depth,width);
break;
}
reset_butt.setEnabled(true);
nextstep_butt.setEnabled(true);
longstep_butt.setEnabled(true);
}
}
private class SimulateOption implements ActionListener{
public void actionPerformed(ActionEvent e){
switch(version) {
case 0:
Simulator set = new Simulator();
set.Simulator(depth,width);
if(e.getSource() == reset_butt){
set.reset();
}
else if(e.getSource() == nextstep_butt){
set.simulateOneStep();
}
else if(e.getSource() == longstep_butt){
set.runLongSimulation();
}
break;
case 1:
SimulatorRF setRF = new SimulatorRF();
setRF.SimulatorRF(depth,width);
if(e.getSource() == reset_butt){
setRF.reset();
}
else if(e.getSource() == nextstep_butt){
setRF.simulateOneStep();
}
else if(e.getSource() == longstep_butt){
setRF.runLongSimulation();
}
break;
case 2:
SimulatorRW setRW = new SimulatorRW();
setRW.SimulatorRW(depth,width);
if(e.getSource() == reset_butt){
setRW.reset();
}
else if(e.getSource() == nextstep_butt){
setRW.simulateOneStep();
}
else if(e.getSource() == longstep_butt){
setRW.runLongSimulation();
}
break;
...
case 25:
SimulatorFWBH setFWBH = new SimulatorFWBH();
setFWBH.SimulatorFWBH(depth,width);
if(e.getSource() == reset_butt){
setFWBH.reset();
}
else if(e.getSource() == nextstep_butt){
setFWBH.simulateOneStep();
}
else if(e.getSource() == longstep_butt){
setFWBH.runLongSimulation();
}
break;
}
reset_butt.setEnabled(true);
nextstep_butt.setEnabled(true);
longstep_butt.setEnabled(true);
}
}
}
Is there a way to fix my code to solve the problem?
I hope that
(1)after I click the "reset" button, it reset the field I generated (don't show up a new field window)
(2)after I click the "next step" button, it simulate next step of the field I generated (inherit the initial data I generate and don't show up a new field window)
(3)after I click the "next hundred step" button, it simulate next hundred step of the field I generated and show the process (inherit the initial data I generate and don't show up a new field window)
Here are my full codes if you are intrested:
https://github.com/KasmaJC/predator-prey-simulation-with-GUI *There is a BlueJ project rar. at button