01: import java.applet.Applet;
02: import java.awt.Color;
03: import java.awt.Graphics;
04: import java.awt.Graphics2D;
05: import java.awt.event.MouseEvent;
06: import java.awt.event.MouseAdapter;
07: import java.awt.event.MouseListener;
08: 
09: public class MergeSortApplet extends Applet
10: {
11:    public MergeSortApplet()
12:    {
13:       class MousePressListener extends MouseAdapter
14:       {
15:          public void mousePressed(MouseEvent event)
16:          {
17:             if (animation != null && animation.isAlive()) 
18:                animation.interrupt();
19:             startAnimation();
20:          }
21:       }
22: 
23:       MouseListener listener = new MousePressListener();
24:       addMouseListener(listener);
25:       setBackground(Color.lightGray);
26: 
27:       sorter = null;
28:       animation = null;
29:    }
30: 
31:    public void paint(Graphics g)
32:    {
33:       if (sorter == null) return;
34:       Graphics2D g2 = (Graphics2D)g;
35:       sorter.draw(g2);
36:    }
37: 
38:    public void startAnimation()
39:    {
40:       class AnimationThread extends Thread
41:       {
42:          public void run()
43:          {
44:             try
45:             {
46:                sorter.sort();
47:             }
48:             catch (InterruptedException exception)
49:             {
50:             }
51:          }
52:       }
53:       
54:       int[] values = ArrayUtil.randomIntArray(30, 300);
55:       sorter = new MergeSorter(values, this);
56:       animation = new AnimationThread();
57:       animation.start();
58:    }
59: 
60:    private MergeSorter sorter;
61:    private Thread animation;
62: }
63: