Print

Print


Hello,

not sure I understand a lot of it but:
1) GUIState.start() calls state.start(), so I suppose you could just
initialize whatever you want by modifying the start after that is called;
that is:

public class  YourGUI extends GUIState{

   @Override
    public void start() {

            super.start();


            initialize();




    }
}


2) If you need more fine-tuned initialization scheduling, remember that
GUIState has its own scheduler you can use by calling things like
scheduleImmediatelyAfter(...) and so on. It's quite well explained in the
manual. Just make sure you check whether you are in the Swing thread or
not.

On Mon, Jan 21, 2019 at 10:21 PM John Filleau <[log in to unmask]>
wrote:

> How do I create a custom inspector drop down text widget with a domain of
> agent name strings?
>
>
>
> I’m following the hexabug example program, where a drop-down menu is
> created to switch between rectangular or hexagonal display values, and
> trying to modify this to give a drop down list of agent names. I create an
> array in the main SimState child class of strings, and populate it in the
> start() method at the same time as I make the agents. Then, in the
> GUIState() child’s getInspector() method, I make a custom inspector with
> dom, get, and set methods. For the dom method, I return the String[] from
> my SimState child. However, this function is only called BEFORE
> SimState.start() is called.
>
>
>
> Is there a way to create a drop down list inspector based on a String
> array that doesn’t exist until I hit the start button? Is there a method I
> can call somewhere in the GUIState after I start the simulation and my
> String[] foragerNames is populated?
>
> Or is there a smarter way to do this?
>
> Please note that selecting an agent currently does nothing (just updates
> the displayed value, if it were to work). Functionality will (hopefully)
> follow once I can figure out how to best do this.
>
>
>
> Partial GUIState child code (SocialFlowMonitoringWithUI) follows:
>
> public class AgentView {
>
>                 int forager = 0;
>
>                 public Object domAgentView() { return
> ((SocialFlowMonitoring)state).foragerNames; }
>
>                 public String nameAgentView() { return "Agent View"; }
>
>                 public String desAgentView() { return "Shows the current
> view of the selected agent."; }
>
>                 public int getAgentView() { return forager; }
>
>                 public void setAgentView(int val) {
>
>                                 forager = val;
>
>                 }
>
>     }
>
>
>
>     public Inspector getInspector()
>
>         {
>
>         // we'll make a fancy inspector which has a nicely arranged update
> button and
>
>         // two subinspectors.  In fact the inspector doesn't need an
> update button --
>
>         // there's nothing that ever changes on update.  But since the
> inspector
>
>         // has been declared non-volatile, just to be consistent, we'll
> add an update
>
>         // button up top to show how it's done.  First we get our two
> subinspectors,
>
>         // one for the hexagon choice menu and one for the model inspector
> proper.
>
>
>
>         final Inspector originalInspector = super.getInspector();
>
>         final SimpleInspector hexInspector = new SimpleInspector(new
> HexagonChoice(), this);
>
>         final SimpleInspector viewInspector = new SimpleInspector(new
> AgentView(), this);
>
>
>
>         // The originalInspector is non-volatile.  It's a SimpleInspector,
> which shows
>
>         // its update-button automagically when non-volatile.  We WANT it
> to be non-volatile,
>
>         // but not show its update button because that just updates the
> inspector and nothing
>
>         // else.  So we declare the inspector to be volatile.  It won't
> matter because it'll
>
>         // NEVER receive updateInspector() calls except via the outer
> inspector we're
>
>         // constructing next (which will be NON-volatile).
>
>
>
>         originalInspector.setVolatile(true);
>
>
>
>         // our wrapper inspector
>
>         Inspector newInspector = new Inspector()
>
>             {
>
>             public void updateInspector() {
> originalInspector.updateInspector(); }  // don't care about updating
> hexInspector
>
>             };
>
>         newInspector.setVolatile(false);
>
>
>
>         // NOW we want our outer inspector to be NON-volatile, but show an
> update button.
>
>         // While SimpleInspectors add their own buttons automagically,
> plain Inspectors
>
>         // do not.  Instead we have to add it manually.  We grab an
> update-button from
>
>         // the inspector, put it in a box so it doesn't stretch when the
> inspector does.
>
>         // And we want to move it in a bit border-wise because that's what
> the SimpleInspector
>
>         // does.
>
>
>
>         Box b = new Box(BoxLayout.X_AXIS)
>
>             {
>
>             public Insets getInsets() { return new Insets(2,2,2,2); }  //
> in a bit
>
>             };
>
>         b.add(newInspector.makeUpdateButton());
>
>         b.add(Box.createGlue());
>
>
>
>         // okay, great.  But we want the button to be up top, followed by
> the hex inspector,
>
>         // and then the originalInspector taking up the rest of the room.
> Sadly, there's
>
>         // no layout manager to do that.  So we do it thus:
>
>
>
>         Box b2 = new Box(BoxLayout.Y_AXIS);
>
>         b2.add(b);
>
>         b2.add(hexInspector);
>
>         b2.add(viewInspector);
>
>         b2.add(Box.createGlue());
>
>
>
>         // all one blob now.  We can add it at NORTH.
>
>
>
>         newInspector.setLayout(new BorderLayout());
>
>         newInspector.add(b2,BorderLayout.NORTH);
>
>         newInspector.add(originalInspector,BorderLayout.CENTER);
>
>
>
>         return newInspector;
>
>         }
>
> Thanks,
>
> John
>
>
>


-- 
Ernesto Carrella
http://secure-web.cisco.com/1pOowXGTvZixGHLA8WWeTWrzHHKDR1XmPps88f4vjTkfOnC1pV2VHyArBJfc_h4OmIlpU29zg1-RyzWABEtEBjoOSQDkT5kzlbYcbVc-axPW7Rs_WA5w39rBT8TMdF7GLsjiKWKdIFLxtbORc4jpYYfvrfttfXT8rWnrgefuBwtLscV-rd7hpIDVh6tSMDpRoc2JDzpqCU1LdpKuN3dVj-NdcTcxaOTZ3a2VG0FrBr6sakBPPNvpdCzTVYiAzvNeTHtVOcbYf2CUA-t_2sjymQBJz4ksfFE5vLm7L9yXObEkhoFNHYDVu6Kk0tpgDkthMjbx_lDYEKeLG5InFx76StHFmP6ummtWgkDmInbeaY9NuIp31R_u7jbgZLthMaKNE7zJtPjpKn7oDmDnM5WlA_irm9SSdA--HW6hCix-2WWXEwDyuGo5miL9461n3pjVRbcjTPpCCs7qvkviBpmMRetawYnng4w97sKIXpMvfYGU/http%3A%2F%2Fcarrknight.github.io%2F