/* Demo.java -- Shows examples of AWT components Copyright (C) 1998, 1999, 2002, 2004, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath examples. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package gnu.classpath.examples.awt; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Canvas; import java.awt.Checkbox; import java.awt.CheckboxGroup; import java.awt.CheckboxMenuItem; import java.awt.Choice; import java.awt.Color; import java.awt.Cursor; import java.awt.Dialog; import java.awt.Dimension; import java.awt.DisplayMode; import java.awt.FileDialog; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.GridLayout; import java.awt.Image; import java.awt.Insets; import java.awt.Label; import java.awt.List; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.MenuShortcut; import java.awt.Panel; import java.awt.ScrollPane; import java.awt.TextField; import java.awt.Toolkit; import java.awt.Window; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragSource; import java.awt.dnd.DragSourceContext; import java.awt.dnd.DragSourceDragEvent; import java.awt.dnd.DragSourceDropEvent; import java.awt.dnd.DragSourceEvent; import java.awt.dnd.DragSourceListener; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.awt.dnd.InvalidDnDOperationException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.net.URL; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; class Demo { public static void main(String args[]) { MainWindow f = new MainWindow(); f.show(); } static interface SubWindow { public void init (); } static class PrettyPanel extends Panel { Insets myInsets; public PrettyPanel () { myInsets = new Insets (10, 10, 10, 10); } public Insets getInsets () { return myInsets; } } static abstract class PrettyFrame extends Frame { public PrettyFrame () { ((BorderLayout) getLayout ()).setHgap (5); ((BorderLayout) getLayout ()).setVgap (5); } public Insets getInsets() { Insets oldInsets = super.getInsets (); return new Insets (oldInsets.top+10, oldInsets.left+10, oldInsets.bottom+10, oldInsets.right+10); } } static abstract class SubFrame extends PrettyFrame implements SubWindow { boolean initted = false; public void setVisible (boolean visible) { if (!initted && visible) init(); super.setVisible (visible); } } static class MainWindow extends PrettyFrame implements ActionListener { Button closeButton; Hashtable windows; Vector buttons; void addSubWindow (String name, SubWindow w) { Button b = new Button (name); b.addActionListener (this); buttons.addElement (b); windows.put (b, w); } MainWindow () { MenuBar mb = new MenuBar (); Menu menu = new Menu ("File"); Menu submenu = new Menu ("Testing", true); submenu.add (new CheckboxMenuItem ("FooBar")); submenu.add (new CheckboxMenuItem ("BarFoo")); menu.add (submenu); menu.add (new MenuItem("Orange")); MenuItem quit = new MenuItem("Quit", new MenuShortcut('Q')); quit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); menu.add(quit); mb.add (menu); menu = new Menu("Edit", true); menu.add(new MenuItem("Cut")); menu.add(new MenuItem("Copy")); menu.add(new MenuItem("Paste")); mb.add (menu); Menu helpMenu = new Menu("Help"); helpMenu.add(new MenuItem("About")); mb.add(helpMenu); mb.setHelpMenu(helpMenu); setMenuBar (mb); String version = System.getProperty("gnu.classpath.version"); add (new Label ("GNU Classpath " + version), "North"); closeButton = new Button ("Close"); closeButton.addActionListener (this); closeButton.setFont (new Font ("Serif", Font.BOLD | Font.ITALIC, 18)); add (closeButton, "South"); windows = new Hashtable (); buttons = new Vector (); addSubWindow ("Buttons", new ButtonsWindow ()); addSubWindow ("Cursors", new CursorsWindow ()); addSubWindow ("Dialog", new DialogWindow (this)); addSubWindow ("File", new FileWindow (this)); addSubWindow ("Labels", new LabelWindow ()); addSubWindow ("List", new ListWindow ()); addSubWindow ("Radio Buttons", new RadioWindow ()); addSubWindow ("TextField", new TextFieldWindow ()); addSubWindow ("RandomTests", new TestWindow (this)); addSubWindow ("RoundRect", new RoundRectWindow ()); addSubWindow ("Animation", new AnimationWindow ()); addSubWindow ("Resolution", new ResolutionWindow ()); addSubWindow ("Fullscreen", new FullscreenWindow ()); addSubWindow ("Drag n' Drop", new DragDropWindow ()); Panel sp = new Panel(); PrettyPanel p = new PrettyPanel(); p.setLayout (new GridLayout (windows.size(), 1)); for (Enumeration e = buttons.elements (); e.hasMoreElements (); ) { p.add ((Button) e.nextElement ()); } sp.add (p); add (sp, "Center"); setTitle ("AWT Demo"); pack(); } public void actionPerformed (ActionEvent evt) { Button source = (Button) evt.getSource (); if (source==closeButton) { dispose(); System.exit (0); } Window w = (Window) windows.get (source); if (w.isVisible ()) w.dispose (); else { if (w instanceof Dialog) { w.show(); } else { w.setVisible (true); } } } } static class ButtonsWindow extends SubFrame implements ActionListener { Button b[] = new Button [9]; public void init () { initted = true; Panel p = new Panel (); p.setLayout (new GridLayout (0, 3, 5, 5)); for (int i=0; i<9; i++) { b[i]=new Button ("button" + (i+1)); b[i].addActionListener (this); } p.add (b[0]); p.add (b[6]); p.add (b[4]); p.add (b[8]); p.add (b[1]); p.add (b[7]); p.add (b[3]); p.add (b[5]); p.add (b[2]); add (p, "North"); Button cb = new Button ("close"); cb.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { dispose(); } }); add (cb, "South"); setTitle ("Buttons"); pack(); } public void actionPerformed (ActionEvent evt) { Button source = (Button) evt.getSource (); for (int i = 0; i < 9; i++) { if (source == b[i]) { int i2 = ((i + 1) == 9) ? 0 : (i + 1); if (b[i2].isVisible()) b[i2].setVisible(false); else b[i2].setVisible(true); } } } } static class DialogWindow extends Dialog implements SubWindow { Label text; Frame parent; boolean initted = false; public DialogWindow (Frame f) { super (f, true); this.parent = f; addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent e) { text.setVisible (false); hide (); } }); } public void setVisible (boolean visible) { if (!initted && visible) init(); super.setVisible (visible); } public void show () { if (!initted) init(); super.show (); } public void init () { text = new Label ("Dialog Test"); text.setAlignment (Label.CENTER); add (text, "North"); text.setVisible (false); Panel p = new PrettyPanel(); Button cb = new Button ("OK"); cb.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { text.setVisible (false); hide(); } }); p.setLayout (new GridLayout (1, 3)); ((GridLayout) p.getLayout ()).setHgap (5); ((GridLayout) p.getLayout ()).setVgap (5); p.add (cb); Button toggle = new Button ("Toggle"); p.add (toggle); toggle.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { if (text.isVisible ()) text.setVisible (false); else text.setVisible (true); doLayout(); } }); Button subdlg = new Button ("SubDialog"); p.add (subdlg); subdlg.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { DialogWindow sw = new DialogWindow (parent); sw.show (); } }); add (p, "South"); setTitle ("Dialog"); pack(); } } static class CursorsWindow extends SubFrame implements ItemListener { Choice cursorChoice; Canvas cursorCanvas; public void init () { cursorChoice = new Choice(); cursorChoice.add ("Default"); cursorChoice.add ("Crosshair"); cursorChoice.add ("Text"); cursorChoice.add ("Wait"); cursorChoice.add ("Southwest Resize"); cursorChoice.add ("Southeast Resize"); cursorChoice.add ("Northwest Resize"); cursorChoice.add ("Northeast Resize"); cursorChoice.add ("North Resize"); cursorChoice.add ("South Resize"); cursorChoice.add ("West Resize"); cursorChoice.add ("East Resize"); cursorChoice.add ("Hand"); cursorChoice.add ("Move"); cursorChoice.addItemListener(this); add (cursorChoice, "North"); cursorCanvas = new Canvas () { public void paint (Graphics g) { Dimension d = this.getSize(); g.setColor(Color.white); g.fillRect(0, 0, d.width, d.height/2); g.setColor(Color.black); g.fillRect(0, d.height/2, d.width, d.height/2); g.setColor(this.getBackground()); g.fillRect(d.width/3, d.height/3, d.width/3, d.height/3); } }; cursorCanvas.setSize (80,80); add (cursorCanvas, "Center"); Button cb = new Button ("Close"); cb.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { dispose(); } }); add (cb, "South"); setTitle ("Cursors"); pack(); } public void itemStateChanged (ItemEvent e) { int index = cursorChoice.getSelectedIndex(); cursorCanvas.setCursor(Cursor.getPredefinedCursor(index)); } } static class TextFieldWindow extends SubFrame implements ItemListener { Checkbox editable, visible, sensitive; TextField text; public void init () { initted = true; text = new TextField ("hello world"); add (text, "North"); Panel p = new Panel(); p.setLayout (new GridLayout (3, 1)); ((GridLayout) p.getLayout ()).setHgap (5); ((GridLayout) p.getLayout ()).setVgap (5); editable = new Checkbox("Editable", true); p.add (editable); editable.addItemListener (this); visible = new Checkbox("Visible", true); p.add (visible); visible.addItemListener (this); sensitive = new Checkbox("Sensitive", true); p.add (sensitive); sensitive.addItemListener (this); add (p, "Center"); Button cb = new Button ("Close"); cb.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { dispose(); } }); add (cb, "South"); setTitle ("TextField"); pack(); } public void itemStateChanged (ItemEvent e) { boolean on=true; if (e.getStateChange () == ItemEvent.DESELECTED) on=false; if (e.getSource() == editable) text.setEditable (on); if (e.getSource() == visible) if (on) text.setEchoChar ((char) 0); else text.setEchoChar ('*'); if (e.getSource() == sensitive) text.setEnabled (on); } } static class FileWindow extends FileDialog implements SubWindow { boolean initted = false; public FileWindow (MainWindow mw) { super (mw); } public void setVisible (boolean visible) { if (!initted && visible) init(); super.setVisible (visible); } public void init() { initted = true; } } static class LabelWindow extends SubFrame { public void init () { initted = true; Panel p = new Panel(); p.setLayout (new GridLayout (3, 1)); ((GridLayout) p.getLayout ()).setHgap (5); ((GridLayout) p.getLayout ()).setVgap (5); p.add (new Label ("left justified label", Label.LEFT)); p.add (new Label ("center justified label", Label.CENTER)); p.add (new Label ("right justified label", Label.RIGHT)); add (p, "Center"); Button cb = new Button ("Close"); cb.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { dispose(); } }); add (cb, "South"); setTitle ("Labels"); pack(); } } static class ListWindow extends SubFrame { public void init () { initted = true; Panel p = new Panel (); p.setLayout (new GridLayout (3, 1)); List l = new List (5, true); for (int i = 0; i < 10; i++) l.add ("List item " + i); p.add (l); add (p, "Center"); Button cb = new Button ("Close"); cb.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { dispose(); } }); add (cb, "South"); setTitle ("List"); pack(); } } static class RadioWindow extends SubFrame { public void init () { initted = true; Panel p = new Panel(); p.setLayout (new GridLayout (3, 1)); ((GridLayout) p.getLayout ()).setHgap (5); ((GridLayout) p.getLayout ()).setVgap (5); final CheckboxGroup cg = new CheckboxGroup(); final Checkbox[] boxes = new Checkbox[3]; for (int i = 0; i < 3; ++i) { boxes[i] = new Checkbox("button" + i, cg, i == 0); p.add(boxes[i]); } add (p, "North"); p = new Panel(); p.setLayout (new GridLayout (1, 3)); ((GridLayout) p.getLayout ()).setHgap (5); ((GridLayout) p.getLayout ()).setVgap (5); for (int i = 0; i < 3; ++i) { final int val = i; Button tweak = new Button ("Set " + i); tweak.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { cg.setSelectedCheckbox(boxes[val]); } }); p.add(tweak); } add (p, "Center"); Button cb = new Button ("Close"); cb.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { dispose(); } }); add (cb, "South"); setTitle ("Radio Buttons"); pack(); } } static class TestWindow extends SubFrame { static int xs = 5, ys = 5; final Frame parent; public TestWindow(Frame f) { parent = f; } public void init() { initted = true; addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent e) { hide (); } }); Panel pan = new Panel(); final Label l = new Label ("Pithy Message:"); l.setCursor (Cursor.getPredefinedCursor (Cursor.WAIT_CURSOR)); pan.add (l); TextField tf = new TextField("Hello world!"); pan.add(tf); add(pan,"North"); final Image img; URL imageurl; imageurl = this.getClass() .getResource("/gnu/classpath/examples/icons/big-warning.png"); img = Toolkit.getDefaultToolkit().createImage(imageurl); final Canvas ch = new Canvas() { public void paint (Graphics g) { g.drawImage(img, xs + 25, ys + 25, this); Font font = new Font ("Serif", Font.PLAIN, 18); g.setFont (font); g.setXORMode (Color.red); g.drawString("Hi Red!", xs + 15, ys + 10); g.setColor (Color.blue); g.drawLine (xs, ys, xs + 100, ys + 100); } }; ch.setSize(150, 150); add(ch, "Center"); final ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); final Panel p = new Panel(); p.add(new Button("Stop")); p.add(new Button("evil")); p.add(new Button("hoarders")); p.add(new Button("use")); p.add(new Button("GNU!")); sp.add(p); add(sp, "South"); Panel east_panel = new Panel(); east_panel.setLayout(new GridLayout (0,1)); CheckboxGroup group = new CheckboxGroup(); Checkbox cb = new Checkbox("one", group, true); east_panel.add(cb); cb = new Checkbox("two", group, false); east_panel.add(cb); add(east_panel,"East"); final Button wb = new Button(); wb.setLabel("Hello World!"); wb.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent e) { l.setText ("Hello World!"); final Dialog d = new Dialog(parent); d.setLayout(new FlowLayout()); d.setModal(true); Button b = new Button("foobar"); b.addMouseListener(new MouseAdapter() { public void mousePressed (MouseEvent me) { d.hide (); } }); d.add (b); List ch = new List(); ch.add("Ding"); ch.add("September"); ch.add("Red"); ch.add("Quassia"); ch.add("Pterodactyl"); d.add(ch); d.pack (); d.show (); } }); wb.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { xs++; ys++; ch.repaint (); } }); add(wb,"West"); pack(); show(); sp.setScrollPosition (10,0); Toolkit t = Toolkit.getDefaultToolkit(); t.beep(); } } static class ResolutionWindow extends SubFrame { GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); public void init () { initted = true; setTitle("Change Screen Resolution"); final List list = new List(); DisplayMode[] modes = gd.getDisplayModes(); for (int i=0;i<modes.length;i++ ) list.add(modes[i].getWidth() + "x" + modes[i].getHeight() + ((modes[i].getBitDepth() != DisplayMode.BIT_DEPTH_MULTI) ? "x" + modes[i].getBitDepth() + "bpp" : "") + ((modes[i].getRefreshRate() != DisplayMode.REFRESH_RATE_UNKNOWN) ? "@" + modes[i].getRefreshRate() + "Hz" : "")); ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent ae) { int i = list.getSelectedIndex(); gd.setDisplayMode(gd.getDisplayModes()[i]); } }; Button b = new Button("Switch"); Button c = new Button("Close"); list.addActionListener(al); b.addActionListener(al); c.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { dispose(); } }); setLayout(new GridLayout(3, 1, 5, 5)); add(list); add(b); add(c); pack(); } } static class DragDropWindow extends SubFrame implements ActionListener, DropTargetListener { DragLabel source = new DragLabel("Drag and drop me to the following Button", Label.CENTER); Button target = new Button(); public void init() { source.setForeground(Color.red); add(source, BorderLayout.NORTH); target.addActionListener(this); add(target, BorderLayout.SOUTH); new DropTarget(target, DnDConstants.ACTION_COPY_OR_MOVE, this); setSize(205, 100); pack(); } public void actionPerformed(ActionEvent e) { Button b = (Button) e.getSource(); b.setLabel(""); } public void dragEnter(DropTargetDragEvent e) { } public void dragExit(DropTargetEvent e) { } public void dragOver(DropTargetDragEvent e) { } public void drop(DropTargetDropEvent e) { try { Transferable t = e.getTransferable(); if (e.isDataFlavorSupported(DataFlavor.stringFlavor)) { e.acceptDrop(e.getDropAction()); String s; s = (String) t.getTransferData(DataFlavor.stringFlavor); target.setLabel(s); e.dropComplete(true); } else e.rejectDrop(); } catch (java.io.IOException e2) { } catch (UnsupportedFlavorException e2) { } } public void dropActionChanged(DropTargetDragEvent e) { } class DragLabel extends Label implements DragGestureListener, DragSourceListener { private DragSource ds = DragSource.getDefaultDragSource(); public DragLabel(String s, int alignment) { super(s, alignment); int action = DnDConstants.ACTION_COPY_OR_MOVE; ds.createDefaultDragGestureRecognizer(this, action, this); } public void dragGestureRecognized(DragGestureEvent e) { try { Transferable t = new StringSelection(getText()); e.startDrag(DragSource.DefaultCopyNoDrop, t, this); } catch (InvalidDnDOperationException e2) { System.out.println(e2); } } public void dragDropEnd(DragSourceDropEvent e) { if (e.getDropSuccess() == false) return; int action = e.getDropAction(); if ((action & DnDConstants.ACTION_MOVE) != 0) setText(""); } public void dragEnter(DragSourceDragEvent e) { DragSourceContext ctx = e.getDragSourceContext(); int action = e.getDropAction(); if ((action & DnDConstants.ACTION_COPY) != 0) ctx.setCursor(DragSource.DefaultCopyDrop); else ctx.setCursor(DragSource.DefaultCopyNoDrop); } public void dragExit(DragSourceEvent e) { } public void dragOver(DragSourceDragEvent e) { } public void dropActionChanged(DragSourceDragEvent e) { } } } static class FullscreenWindow extends SubFrame { GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); public void init () { initted = true; setTitle("Fullscreen Exclusive Mode"); ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent ae) { if (gd.getFullScreenWindow() == FullscreenWindow.this) gd.setFullScreenWindow(null); else gd.setFullScreenWindow(FullscreenWindow.this); } }; Button b = new Button("Toggle Fullscreen"); Button c = new Button("Close"); b.addActionListener(al); c.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { gd.setFullScreenWindow(null); dispose(); } }); setLayout(new GridLayout(3, 1, 5, 5)); add(b); add(c); pack(); } } static class RoundRectWindow extends SubFrame { public void init () { initted = true; setTitle("RoundRect"); setLayout(new BorderLayout()); add(new DrawRoundRect(), "West"); Button cb = new Button ("Close"); cb.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { dispose(); } }); add(cb, "Center"); add(new FillRoundRect(), "East"); pack(); } static class DrawRoundRect extends Panel { public Dimension getPreferredSize() { return new Dimension(500, 500); } public void paint( Graphics g ) { // left side // rectangles should be identical g.setColor(Color.red); g.drawRect(50, 50, 300, 100); g.setColor(Color.black); g.drawRoundRect(50, 50, 300, 100, 0, 0); // small round corners g.setColor(Color.red); g.drawRect(50, 200, 300, 100); g.setColor(Color.black); g.drawRoundRect(50, 200, 300, 100, 25, 25); // round ends g.setColor(Color.red); g.drawRect(50, 350, 300, 100); g.setColor(Color.black); g.drawRoundRect(50, 350, 300, 100, 25, 100); // right side // circle only g.setColor(Color.blue); g.drawOval(375, 50, 100, 100); // round rectangle should exactly cover circle g.setColor(Color.blue); g.drawOval(375, 200, 100, 100); g.setColor(Color.black); g.drawRoundRect(375, 200, 100, 100, 100, 100); // round rectangle should look like a circle g.setColor(Color.red); g.drawRect(375, 350, 100, 100); g.setColor(Color.black); g.drawRoundRect(375, 350, 100, 100, 100, 100); } } static class FillRoundRect extends Panel { public Dimension getPreferredSize() { return new Dimension(500, 500); } public void paint( Graphics g ) { // left side // rectangles should be identical g.setColor(Color.red); g.fillRect(50, 50, 300, 100); g.setColor(Color.black); g.fillRoundRect(50, 50, 300, 100, 0, 0); // small round corners g.setColor(Color.red); g.fillRect(50, 200, 300, 100); g.setColor(Color.black); g.fillRoundRect(50, 200, 300, 100, 25, 25); // round ends g.setColor(Color.red); g.fillRect(50, 350, 300, 100); g.setColor(Color.black); g.fillRoundRect(50, 350, 300, 100, 25, 100); // right side // circle only g.setColor(Color.blue); g.fillOval(375, 50, 100, 100); // round rectangle should exactly cover circle g.setColor(Color.blue); g.fillOval(375, 200, 100, 100); g.setColor(Color.black); g.fillRoundRect(375, 200, 100, 100, 100, 100); // round rectangle should look like a circle g.setColor(Color.red); g.fillRect(375, 350, 100, 100); g.setColor(Color.black); g.fillRoundRect(375, 350, 100, 100, 100, 100); } } } static class AnimationWindow extends SubFrame { AnimationApplet a; public void init () { initted = true; setTitle("Animation"); Button cb = new Button ("Close"); cb.addActionListener(new ActionListener () { public void actionPerformed (ActionEvent e) { if (a != null) { a.destroy(); dispose(); } } }); a = new AnimationApplet(); add(a, "Center"); add(cb, "South"); pack(); } public void show() { super.show(); a.init(); a.run(); } } }