/* Copyright 2006 by Sean Luke and George Mason University Licensed under the Academic Free License version 3.0 See the file "LICENSE" for more information */ package sim.app.tutorial4; import sim.portrayal.*; import sim.portrayal.grid.*; import sim.field.grid.*; import java.awt.event.*; import java.awt.*; import javax.swing.*; import sim.engine.*; import sim.util.*; import sim.display.*; public class BigParticleInspector extends Inspector { public Inspector originalInspector; public BigParticleInspector(Inspector originalInspector, LocationWrapper wrapper, GUIState guiState) { this.originalInspector = originalInspector; // get info out of the wrapper SparseGridPortrayal2D gridportrayal = (SparseGridPortrayal2D) wrapper.getFieldPortrayal(); // these are final so that we can use them in the anonymous inner class below... final SparseGrid2D grid = (SparseGrid2D)(gridportrayal.getField()); final BigParticle particle = (BigParticle) wrapper.getObject(); final SimState state = guiState.state; final Controller console = guiState.controller; // The Console (it's a Controller subclass) // now let's add a Button Box box = new Box(BoxLayout.X_AXIS); JButton button = new JButton("Roll the Dice"); box.add(button); box.add(Box.createGlue()); // set up our inspector: keep the properties inspector around too setLayout(new BorderLayout()); add(originalInspector, BorderLayout.CENTER); add(box, BorderLayout.NORTH); // set what the button does button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { synchronized(state.schedule) { // randomize direction particle.xdir = state.random.nextInt(3) - 1; particle.ydir = state.random.nextInt(3) - 1; // randomize location grid.setObjectLocation(particle, new Int2D(state.random.nextInt(grid.getWidth()), state.random.nextInt(grid.getHeight()))); // repaint everything: console, inspectors, displays, // everything that might be affected by randomization console.refresh(); } } }); } public void updateInspector() { originalInspector.updateInspector(); } }