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