Java Code:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import java.util.Vector;

import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ManyGeneralPath extends JApplet {
  DrawingCanvas canvas;

  public static void main(String[] a) {
    JFrame f = new JFrame();
    ManyGeneralPath path = new ManyGeneralPath();
    path.init();
    f.getContentPane().add(path);
    f.setDefaultCloseOperation(1);
    f.setSize(650, 250);
    f.setVisible(true);
  }

  public void init() {
    Container container = getContentPane();
    JPanel panel = new JPanel();
    canvas = new DrawingCanvas();
    container.add(canvas);
  }

  class DrawingCanvas extends Canvas {
    Vector generalPaths;

    GeneralPath selectedGPath = null;

    Rectangle2D boundingRec = null;

    int selectedRule = GeneralPath.WIND_NON_ZERO;

    boolean drawNoFill = false;

    public DrawingCanvas() {
      setBackground(Color.white);
      setSize(400, 200);
      generalPaths = new Vector();

      GeneralPath gp1, gp2, gp3, gp4, gp5, gp6, gp7, gp8;

      gp1 = new GeneralPath();
      gp1.moveTo(50, 10);
      gp1.lineTo(70, 80);
      gp1.lineTo(90, 40);
      gp1.lineTo(10, 40);
      gp1.lineTo(50, 80);
      gp1.closePath();
      generalPaths.addElement(gp1);

      gp2 = new GeneralPath();
      gp2.moveTo(120, 20);
      gp2.lineTo(180, 20);
      gp2.lineTo(120, 80);
      gp2.lineTo(180, 80);
      gp2.closePath();
      generalPaths.addElement(gp2);

      gp3 = new GeneralPath();
      gp3.moveTo(220, 20);
      gp3.lineTo(280, 20);
      gp3.lineTo(280, 60);
      gp3.lineTo(240, 60);
      gp3.lineTo(240, 40);
      gp3.lineTo(260, 40);      gp3.lineTo(260, 80);
      gp3.lineTo(220, 80);
      gp3.closePath();
      generalPaths.addElement(gp3);

      gp4 = new GeneralPath();
      gp4.moveTo(310, 20);
      gp4.lineTo(380, 20);
      gp4.lineTo(380, 80);
      gp4.lineTo(320, 80);
      gp4.lineTo(320, 10);
      gp4.lineTo(340, 10);
      gp4.lineTo(340, 60);
      gp4.lineTo(360, 60);
      gp4.lineTo(360, 40);
      gp4.lineTo(310, 40);
      gp4.closePath();
      generalPaths.addElement(gp4);

      gp5 = new GeneralPath();
      gp5.moveTo(50, 120);
      gp5.lineTo(70, 180);
      gp5.lineTo(20, 140);
      gp5.lineTo(80, 140);
      gp5.lineTo(30, 180);
      gp5.closePath();
      generalPaths.addElement(gp5);

      gp6 = new GeneralPath();
      gp6.moveTo(120, 180);
      gp6.quadTo(150, 120, 180, 180);
      gp6.closePath();
      generalPaths.addElement(gp6);

      gp7 = new GeneralPath();
      gp7.moveTo(220, 150);
      gp7.curveTo(240, 130, 280, 160, 300, 140);
      gp7.lineTo(300, 180);
      gp7.quadTo(260, 160, 220, 180);
      gp7.closePath();
      generalPaths.addElement(gp7);

      gp8 = new GeneralPath();
      gp8.moveTo(360, 100);
      gp8.lineTo(360, 200);
      gp8.lineTo(400, 140);
      gp8.lineTo(320, 120);
      gp8.lineTo(400, 180);
      gp8.lineTo(320, 180);
      gp8.closePath();
      generalPaths.addElement(gp8);
    }

    public void paint(Graphics g) {
      Graphics2D g2D = (Graphics2D) g;

      for (int i = 0; i < generalPaths.size(); i++) {
        if (drawNoFill) {
          g2D.draw((GeneralPath) generalPaths.elementAt(i));
        } else {
          g2D.fill((GeneralPath) generalPaths.elementAt(i));
        }
      }
    }
  }
}