import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.Graphics2D; import java.awt.geom.*; import java.awt.geom.Point2D.Float; /** * Draws triangle with thick border in window coordinates + rect and translated rect. * * @author Bob Futrelle * @version 0.2, 6 April 2003 * */ public class SDDrawer extends JPanel { /** * Translate a point. */ public Point2D.Float addP2(Point2D.Float p1, Point2D.Float p2) { return new Point2D.Float(p1.x + p2.x, p1.y + p2.y); } /** * Draw and fill a Rectangle */ public void drawRec(Graphics2D g2, Point2D.Float p1, Point2D.Float p2, Point2D.Float p3, Point2D.Float p4){ GeneralPath pth1 = new GeneralPath(); pth1.moveTo(p1.x,p1.y); pth1.lineTo(p2.x,p2.y); pth1.lineTo(p3.x,p3.y); pth1.lineTo(p4.x,p4.y); pth1.closePath(); g2.fill(pth1); } // drawRec public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; // create a triangle that should have the peak at the top. GeneralPath pth = new GeneralPath(); pth.moveTo(200,200); // "top" peak of triangle pth.lineTo(100,150); // "lower" left corner pth.lineTo(300,150); // "lower" right corner pth.closePath(); // back to "top" g2.setPaint(Color.red); g2.fill(pth); // fill with red g2.setStroke(new BasicStroke(3)); // make border path wide g2.setPaint(Color.green); // outline with green g2.draw(pth); // Create a rectangle and a translated version. Point2D.Float p1 = new Point2D.Float(350,100); Point2D.Float p2 = new Point2D.Float(450,100); Point2D.Float p3 = new Point2D.Float(450,150); Point2D.Float p4 = new Point2D.Float(350,150); drawRec(g2,p1,p2,p3,p4); Point2D.Float delP = new Point2D.Float(200,0); p1 = addP2(p1,delP); p2 = addP2(p2,delP); p3 = addP2(p3,delP); p4 = addP2(p4,delP); drawRec(g2,p1,p2,p3,p4); } } // class SDDrawer