Subject: | |
From: | |
Reply To: | |
Date: | Tue, 10 Oct 2006 12:41:02 -0400 |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
On Oct 10, 2006, at 11:40 AM, Maciej M. Latek wrote:
> Everything depends on the layout you are using. In most cases, a
> straightforward application of any of them to repaint a dynamic
> network each
> MASON time step will result in display of many intermittent JUNG
> steps,
> which makes things slower and certainly a lot uglier.
If the issue is that JUNG is taking too long to repaint, here's
another approach. Let's say that you've inserted into your
GUIState's "mini-schedule" a repeating Steppable that looks like this:
public class MySteppable extends Steppable
{
public void step(SimState state) { if (myJungComponent!=null)
myJungComponent.repaint(); }
}
You could set this up to only update within N milliseconds like this:
public class MySteppable extends Steppable
{
Thread timer = null;
public void startTimer(final long milliseconds)
{
if (timer == null)
timer= sim.util.Utilities.doLater(milliseconds, new
Runnable()
{
public void run()
{
if (myJungComponent!=null) myJungComponent.repaint();
timer = null; // reset the timer
}
});
}
public void step(SimState state) { startTimer(100); }
}
This guarantees that only one repaint will be forced every 100ms. Of
course, it also delays your repaint by as much as 100ms -- if you'd
like an immediate repaint followed by a 100ms wait, an easy way to do
it is to just do a repaint now and a repaint at 100ms later like this:
public class MySteppable extends Steppable
{
long lastRepaint = 0;
public void startTimer(final long milliseconds)
{
if (timer == null)
{
if (myJungComponent!=null) myJungComponent.repaint(); //
repaint now
timer= sim.util.Utilities.doLater(milliseconds, new
Runnable()
{
public void run()
{
if (myJungComponent!=null) myJungComponent.repaint
(); // repaint later
timer = null; // reset the timer
}
});
}
public void step(SimState state) { startTimer(100); }
}
Sean
|
|
|