01: import java.awt.*;
02: import javax.swing.*;
03: 
04: /**
05:    This panel draws an array and marks two elements in the
06:    array.
07: */ 
08: public class ArrayPanel extends JPanel
09: {
10: 
11:    public void paintComponent(Graphics g)
12:    {
13:       if (values == null) return;
14:       super.paintComponent(g);
15:       Graphics2D g2 = (Graphics2D) g;
16:       int width = getWidth() / values.length;
17:       for (int i = 0; i < values.length; i++)
18:       {
19:          Integer v = (Integer) values[i];
20:          Rectangle bar = new Rectangle(
21:             width * i, 0, width, v.intValue());
22:          if (v == marked1 || v == marked2)
23:             g2.fill(bar);
24:          else
25:             g2.draw(bar);
26:       } 
27:    }
28: 
29:    /**
30:       Sets the values to be painted.
31:       @param values the array of values to display
32:       @param marked1 the first marked element
33:       @param marked2 the second marked element
34:    */
35:    public void setValues(Object[] values,
36:       Object marked1, Object marked2)
37:    {
38:       this.values = (Object[])values.clone();
39:       this.marked1 = marked1;
40:       this.marked2 = marked2;
41:       repaint();
42:    }
43: 
44:    private Object marked1;
45:    private Object marked2;
46:    private Object[] values;
47: }