    01: import java.awt.*;
    02: import java.awt.event.*;
    03: import javax.swing.*;
    04:
    05: /**
    06:    This program animates a sort algorithm.
    07: */
    08: public class AnimationTest
    09: {
    10:    public static void main(String[] args)
    11:    {
    12:       JFrame frame = new JFrame();
    13:       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    14:
    15:       Container contentPane = frame.getContentPane();
    16:       ArrayPanel panel = new ArrayPanel();
    17:       contentPane.add(panel, BorderLayout.CENTER);
    18:       final Gate gate = new Gate();
    19:       gate.setActive(true);
    20:
    21:       JButton runButton = new JButton("Run");
    22:       runButton.addActionListener(new
    23:          ActionListener()
    24:          {
    25:             public void actionPerformed(ActionEvent event)
    26:             {
    27:                gate.setActive(false);
    28:             }
    29:          });
    30:
    31:       JButton stepButton = new JButton("Step");
    32:       stepButton.addActionListener(new
    33:          ActionListener()
    34:          {
    35:             public void actionPerformed(ActionEvent event)
    36:             {
    37:                gate.setOpen(true);
    38:             }
    39:          });
    40:
    41:       JPanel buttons = new JPanel();
    42:       buttons.add(runButton);
    43:       buttons.add(stepButton);
    44:       contentPane.add(buttons, BorderLayout.NORTH);
    45:       frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
    46:       frame.show();
    47:
    48:       Object[] values = new Object[VALUES_LENGTH];
    49:       for (int i = 0; i < values.length; i++)
    50:          values[i] = new Integer(
    51:             (int)(Math.random() * panel.getHeight()));
    52:
    53:       Runnable r = new Sorter(values, panel, gate);
    54:       Thread sorterThread = new Thread(r);
    55:       sorterThread.start();
    56:    }
    57:
    58:    private static final int FRAME_WIDTH = 300;
    59:    private static final int FRAME_HEIGHT = 300;
    60:    private static final int VALUES_LENGTH = 30;
    61: }