/* Bookmark Menu Applet Window WARNING: Use either parameter 'target' or setTarget() method. Don't use both! */ import java.applet.*; import java.awt.event.*; import java.awt.*; // for Menu import java.net.*; // for URL, MalformedURLException import java.io.*; // for InputStream, Reader public class BookmarkMenuApplet extends Applet { final PopupMenu m = new PopupMenu();; final Button b = new Button(); String target = "j1menu"; // target name of browser window String filename = "bookmark.htm"; // file to read bookmarks from final Applet a = this; // only final variables can be used in inner anonymous classes ActionListener jumpToUrl = // When a menu is clicked, jump to corresponding URL new ActionListener(){ public void actionPerformed(ActionEvent e) { try{ URL url = new URL(e.getActionCommand()); // the menu's action command stores URL a.getAppletContext().showDocument(url,target); // load the URL to the target browser window }catch(MalformedURLException me){ showStatus("Malformed URL: "+e.getActionCommand()); } } } ; public void init() { setLayout(new BorderLayout(0,0)); // BorderLayout can display a button ... // ...with the size of the applet b.setLabel("Loading..."); b.setSize(this.getSize()); // button should occupy the whole applet add(b); // Clicking on this button ... add(m); // ...will activate this popup menu validate(); // Draw the applet as soon as possible // ..although it will not be ready for a while // That will make it look as if it is fast! // Clicking on the button should open the popup menu b.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ Rectangle r = b.getBounds(); m.show(a, r.x, r.y+r.height); } }); // Load the menu items from the bookmark file getParameters(); try{ // now load menu description file MenuLoader loader = new MenuLoader( // create new menu loader... m // .. to load this menu... , getBookmarksReader(filename) // .. from this file , jumpToUrl // .. jump to URL when menu clicked ); addAboutMenuItem(m, jumpToUrl, // Add "About this applet" menu item getCodeBase().toString()+"readme.html"); // Description file in the same directory where this applet is loader.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if( e.getActionCommand().equals("done") ) b.setLabel("Bookmarks"); else b.setLabel("Error"); } }); loader.start(); }catch(IOException e){ showStatus("IOException:"+e); b.setLabel("Loading Error"); b.setEnabled(false); } } /* This method can be called from a JavaScript to * specify target window for opening bookmarks */ public void setTarget(String target){ this.target = target; } // ---------------- protected methods --------------- Reader getBookmarksReader(String filename) throws IOException{ return new InputStreamReader( new URL(getDocumentBase(), filename) .openStream() ); } void getParameters(){ String t = getParameter("target"); if( t != null ) target = t; t = getParameter("filename"); if( t!= null ) filename = t; } /* * addAboutMenuItem() * @purpose Adds "About" menu item as the 1st item in the menu */ static void addAboutMenuItem(PopupMenu m, ActionListener action, String url) { MenuItem i = new MenuItem("About \"Bookmark Menu Applet\""); i.setActionCommand(url); i.addActionListener(action); m.insertSeparator(0); m.insert(i,0); } // ---------------- methods for testing ---------------- void debug(String msg){ System.out.println(msg); } /* public URL getDocumentBase(){ try{ return new URL("file:."); }catch(MalformedURLException e){ showStatus("MalformedURLException:"+e); return null; } } public void showStatus(String status){System.out.println(status);} public static void main(String[] args) { Frame f = new Frame("Bookmark Tester"); f.setSize(300,200); final Applet a = new j1menu(); f.add(a); f.addWindowListener( new WindowListener(){ public void windowClosed(WindowEvent e) {} public void windowClosing(WindowEvent e) { System.exit(0); } public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e){} public void windowIconified(WindowEvent e) { a.stop(); } public void windowDeiconified(WindowEvent e){ a.start(); } public void windowOpened(WindowEvent e) { a.init(); a.start();} }); f.show(); } */ }