Java Tutorial/2D Graphics/Graphic Path

Материал из Java эксперт
Перейти к: навигация, поиск

Bezier Lab

   <source lang="java">

import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.GeneralPath; public class BezLab extends Frame implements MouseListener, MouseMotionListener {

 private int[] xs = { 75, 150, 300, 375 };
 private int[] ys = { 250, 100, 350, 250 };
 private int dragIndex = NOT_DRAGGING;
 private final static int NEIGHBORHOOD = 15;
 private final static int NOT_DRAGGING = -1;
 public static void main(String[] args) {
   (new BezLab()).setVisible(true);
 }
 BezLab() {
   setSize(500, 450);
   addMouseListener(this);
   addMouseMotionListener(this);
   addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       System.exit(0);
     }
   });
 }
 public void paint(Graphics g) {
   for (int i = 0; i < 4; i++) {
     if (i == 0 || i == 3)
       g.setColor(Color.blue);
     else
       g.setColor(Color.cyan);
     g.fillOval(xs[i] - 6, ys[i] - 6, 12, 12);
   }
   Graphics2D g2d = (Graphics2D) g;
   g2d.setColor(Color.black);
   GeneralPath path = new GeneralPath();
   path.moveTo(xs[0], ys[0]);
   path.curveTo(xs[1], ys[1], xs[2], ys[2], xs[3], ys[3]);
   g2d.draw(path);
 }
 public void mousePressed(MouseEvent e) {
   dragIndex = NOT_DRAGGING;
   int minDistance = Integer.MAX_VALUE;
   int indexOfClosestPoint = -1;
   for (int i = 0; i < 4; i++) {
     int deltaX = xs[i] - e.getX();
     int deltaY = ys[i] - e.getY();
     int distance = (int) (Math.sqrt(deltaX * deltaX + deltaY * deltaY));
     if (distance < minDistance) {
       minDistance = distance;
       indexOfClosestPoint = i;
     }
   }
   if (minDistance > NEIGHBORHOOD)
     return;
   dragIndex = indexOfClosestPoint;
 }
 public void mouseReleased(MouseEvent e) {
   if (dragIndex == NOT_DRAGGING)
     return;
   xs[dragIndex] = e.getX();
   ys[dragIndex] = e.getY();
   dragIndex = NOT_DRAGGING;
   repaint();
 }
 public void mouseDragged(MouseEvent e) {
   if (dragIndex == NOT_DRAGGING)
     return;
   xs[dragIndex] = e.getX();
   ys[dragIndex] = e.getY();
   repaint();
 }
 public void mouseClicked(MouseEvent e) {
 }
 public void mouseEntered(MouseEvent e) {
 }
 public void mouseExited(MouseEvent e) {
 }
 public void mouseMoved(MouseEvent e) {
 }

}</source>





Complex Paths: Star

   <source lang="java">

import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.GeneralPath; import java.awt.geom.Point2D; import javax.swing.JComponent; import javax.swing.JFrame; class MyCanvas extends JComponent {

 public void paint(Graphics g) {
   Graphics2D g2D = (Graphics2D) g;
   Point2D.Float point = new Point2D.Float(100, 100);                     // store start point
   GeneralPath p = new GeneralPath(GeneralPath.WIND_NON_ZERO);
   p.moveTo(point.x, point.y);
   p.lineTo(point.x + 20.0f, point.y - 5.0f);           // Line from start to A
   point = (Point2D.Float)p.getCurrentPoint();
   p.lineTo(point.x + 5.0f, point.y - 20.0f);           // Line from A to B
   point = (Point2D.Float)p.getCurrentPoint();
   p.lineTo(point.x + 5.0f, point.y + 20.0f);           // Line from B to C
   point = (Point2D.Float)p.getCurrentPoint();
   p.lineTo(point.x + 20.0f, point.y + 5.0f);           // Line from C to D
   point = (Point2D.Float)p.getCurrentPoint();
   p.lineTo(point.x - 20.0f, point.y + 5.0f);           // Line from D to E
   point = (Point2D.Float)p.getCurrentPoint();
   p.lineTo(point.x - 5.0f, point.y + 20.0f);           // Line from E to F
   point = (Point2D.Float)p.getCurrentPoint();
   p.lineTo(point.x - 5.0f, point.y - 20.0f);           // Line from F to g
   p.closePath();                                       // Line from G to start
   g2D.draw(p);
 }

} public class PaintStar {

 public static void main(String[] a) {
   JFrame window = new JFrame();
   window.setBounds(30, 30, 300, 300);
   window.getContentPane().add(new MyCanvas());
   window.setVisible(true);
 }

}</source>