package edu.hws.eck.mdb; import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * This applet appears on the screen as a single button. When the user * clicks the button, a window of type MandelbrotFrame is opened. Clicking * the button while the window is open will close the window. After the * window has been closed, the button can be used to open a new one. * Obviously, the applet should be rather small, just large enough to * show one button. Note that in an applet tag on a web page, this * class should be referred to as code="edu.hws.eck.mdb.LauncherApplet.class". */ public class LauncherApplet extends JApplet { private String launchCommand; // Text for the button. private String closeCommand; // Text for the button if the window is open. private JButton launchButton; private MandelbrotFrame frame; /** * Set up the applet to show just the launchButton, and add * an ActionListener to that button. */ public void init() { launchCommand = I18n.tr("launcherApplet.launchCommand"); closeCommand = I18n.tr("launcherApplet.closeCommand"); launchButton = new JButton(launchCommand); getContentPane().setLayout(new BorderLayout()); getContentPane().add(launchButton,BorderLayout.CENTER); launchButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { doClick(); } } ); } /** * Called by the ActionListener when the user clicks on the launcher * button. If frame is null, a new frame is created and made visible. * If frame is not null, the frame is closed. The launchButton is * disabled (briefly) while the frame is opening or closing. A * window listener on the frame re-enables the button and sets * its text when the window is finished opening or closing. Also, * when the window closes, the frame variable is set to null which * will indicate to this routine that a new window can be opened. */ private void doClick() { launchButton.setEnabled(false); if (frame == null) { frame = new MandelbrotFrame(true); frame.adjustToScreenIfNecessary(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.addWindowListener( new WindowAdapter() { public void windowOpened(WindowEvent evt) { // Called when window opens; this only happens when // the frame is created by the doClick() method. launchButton.setText(closeCommand); launchButton.setEnabled(true); } public void windowClosed(WindowEvent evt) { // Called when the window closes for any reason. // This can be because the user clicks the button // again or because the user closes the frame with // its "Close" command or by clicking its close box. launchButton.setText(launchCommand); launchButton.setEnabled(true); frame = null; } }); frame.setVisible(true); } else { frame.dispose(); frame.getMandelbrotPanel().getDisplay().shutDownThreads(); } } /** * This is called when the applet is about to be destroyed. * Clean up by disposing the frame and making sure that the * worker threads in the MandebrotWorker get shut down. */ public void destroy() { if (frame != null) { frame.dispose(); frame.getMandelbrotPanel().getDisplay().shutDownThreads(); frame = null; } } }