import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

@SuppressWarnings("serial")
public class GradientApplet extends JApplet {
  // Initialize the applet
    @Override
    public void init() {
    GradientPane pane = new GradientPane();                            // Pane containing filled rectangles
    getContentPane().add(pane);                                        // BorderLayout.CENTER is default position
  }

  // Class defining a pane on which to draw
  class GradientPane extends JComponent {
      @Override
      public void paint(Graphics g) {
      Graphics2D g2D = (Graphics2D)g;

      Point2D.Float p1 = new Point2D.Float(150.f, 75.f);               // Gradient line start
      Point2D.Float p2 = new Point2D.Float(250.f, 75.f);               // Gradient line end
      float width = 300;
      float height = 50;
      GradientPaint g1 = new GradientPaint(p1, Color.WHITE,
                                           p2, Color.DARK_GRAY,
                                           true);                      // Cyclic gradient
      Rectangle2D.Float rect1 = new Rectangle2D.Float(p1.x-100, p1.y-25, width,height);
      g2D.setPaint(g1);                                                // Gradient color fill
      g2D.fill(rect1);                                                 // Fill the rectangle
      g2D.setPaint(Color.BLACK);                                       // Outline in black
      g2D.draw(rect1);                                                 // Fill the rectangle
      g2D.draw(new Line2D.Float(p1, p2));
      g2D.drawString("Cyclic Gradient Paint", p1.x-100, p1.y-50);
      g2D.drawString("p1", p1.x-20, p1.y);
      g2D.drawString("p2", p2.x+10, p2.y);

      p1.setLocation(150, 200);
      p2.setLocation(250, 200);
      GradientPaint g2 = new GradientPaint(p1, Color.WHITE,
                                           p2, Color.DARK_GRAY,
                                           false);                     // Acyclic gradient
      rect1.setRect(p1.x-100, p1.y-25, width, height);
      g2D.setPaint(g2);                                                // Gradient color fill
      g2D.fill(rect1);                                                 // Fill the rectangle
      g2D.setPaint(Color.BLACK);                                       // Outline in black
      g2D.draw(rect1);                                                 // Fill the rectangle
      g2D.draw(new Line2D.Float(p1, p2));
      g2D.drawString("Acyclic Gradient Paint", p1.x-100, p1.y-50);
      g2D.drawString("p1", p1.x-20, p1.y);
      g2D.drawString("p2", p2.x+10, p2.y);
    }
  }
}
