/*
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.display;
import java.applet.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/** A simple class for creating Applets out of your simulations. Due to security restrictions,
certain things will not work, such as reading files (loading models) or writing files
(producing movies etc.).
<p>You can check to see if you're running under an applet by testing the value of
SimApplet.isApplet
*/
public class SimApplet extends Applet
{
// some random static stuff to force Display2D and Console classes to load, as they have
// some important properties to set
static boolean b;
static int i;
static
{
b = Display2D.isMacOSX();
i = Console.DEFAULT_WIDTH;
}
static boolean isApplet = false;
public SimApplet() { isApplet = true; }
public static boolean isApplet() { return isApplet; }
public void init()
{
String simClassName = getParameter("Simulation");
String simHumanName = getParameter("Name");
final JButton button = new JButton("Start " + simHumanName);
setLayout(new BorderLayout());
add(button, BorderLayout.CENTER);
try
{
// load that class
final Class simClass = Class.forName(simClassName, true, Thread.currentThread().getContextClassLoader());
if (!(GUIState.class.isAssignableFrom(simClass)) && !simClass.equals(sim.display.Console.class)) // if it's not a GUIState or Console
throw new Exception("Class is not a GUIState or the Console: " + simClass);
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
try
{
setupApplet(simClass);
}
catch (Exception e)
{
doException(button,e);
}
}
});
}
catch (Exception e)
{
doException(button,e);
}
}
void setupApplet(Class GUIStateClass) throws Exception // yes, purposely capitalized
{
if (GUIStateClass.equals(Console.class))
Console.main(new String[] {});
else
{
GUIState state = (GUIState)(GUIStateClass.newInstance());
/*
Console c = new Console(state);
c.setVisible(true);
*/
state.createController();
}
}
void doException(JComponent button, Exception e)
{
JTextArea text = new JTextArea();
text.setText("" + e);
JScrollPane scroll = new JScrollPane(text);
if (button != null) remove(button);
add(scroll,BorderLayout.CENTER);
e.printStackTrace();
}
}