/* This example shows how a Java app can allow a script to customize a UI */ import java.awt.*; import java.awt.event.*; import java.io.*; import org.apache.bsf.*; import org.apache.bsf.util.*; public class ScriptedUI { BSFManager mgr = new BSFManager (); public ScriptedUI (String fileName) { Frame f = new Frame ("Application's Main Frame"); f.addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent e) { System.exit (0); } }); Panel p = new Panel (); f.add ("Center", p); f.add ("North", new Button ("North Button")); f.add ("South", new Button ("South Button")); mgr.registerBean ("centerPanel", p); mgr.registerBean ("parentFrame", f); // --rgf, 2006-08-08: to allow Jacl to get to frame ... // exec script engine code to do its thing for this try { String language = BSFManager.getLangFromFilename (fileName); FileReader in = new FileReader (fileName); String script = IOUtils.getStringFromReader (in); mgr.exec (language, fileName, -1, -1, script); } catch (BSFException e) { System.err.println ("Ouch: " + e.getMessage ()); e.printStackTrace (); } catch (IOException e) { System.err.println ("Ouch: " + e.getMessage ()); e.printStackTrace (); } // now pack and show the frame f.pack (); // f.show(); // javac 1.5 warns to use f.show(), Apache build scripts abort as a result :( f.setVisible(true); // available since Java 1.1 } public static void main (String[] args) throws Exception { if (args.length != 1) { System.err.println ("Usage: java ScriptedUI filename"); System.err.println (" where filename is the name of the script"); System.exit (1); } new ScriptedUI (args[0]); } }