zoukankan      html  css  js  c++  java
  • Java基础之在窗口中绘图——显示曲线的控制点(CurveApplet 2 displaying control points)

    Applet程序。

      1 import javax.swing.*;
      2 import java.awt.*;
      3 import java.awt.geom.*;
      4 
      5 @SuppressWarnings("serial")
      6 public class CurveApplet extends JApplet {
      7   // Initialize the applet
      8   @Override
      9   public void init() {
     10     pane = new CurvePane();                                            // Create pane containing curves
     11     Container content = getContentPane();                              // Get the content pane
     12 
     13     // Add the pane displaying the curves to the content pane for the applet
     14     content.add(pane);                                                 // BorderLayout.CENTER is default position
     15   }
     16 
     17   // Class defining a pane on which to draw
     18   class CurvePane extends JComponent {
     19     // Constructor
     20     public CurvePane() {
     21       quadCurve = new QuadCurve2D.Double(                              // Create quadratic curve
     22                       startQ.x, startQ.y,                              // Segment start point
     23                       control.x, control.y,                            // Control point
     24                       endQ.x, endQ.y);                                 // Segment end point
     25 
     26       cubicCurve = new CubicCurve2D.Double(                            // Create cubic curve
     27                       startC.x, startC.y,                              // Segment start point
     28                       controlStart.x, controlStart.y,                  // Control pt for start
     29                       controlEnd.x, controlEnd.y,                      // Control point for end
     30                       endC.x, endC.y);                                 // Segment end point
     31     }
     32 
     33     @Override
     34     public void paint(Graphics g) {
     35       Graphics2D g2D = (Graphics2D)g;                                  // Get a 2D device context
     36 
     37       // Draw the curves
     38       g2D.setPaint(Color.BLUE);
     39       g2D.draw(quadCurve);
     40       g2D.draw(cubicCurve);
     41 
     42       // Create and draw the markers showing the control points
     43       g2D.setPaint(Color.red);                                         // Set the color
     44       ctrlQuad.draw(g2D);
     45       ctrlCubic1.draw(g2D);
     46       ctrlCubic2.draw(g2D);
     47       // Draw tangents from the curve end points to the control marker centers
     48       Line2D.Double tangent = new Line2D.Double(startQ, ctrlQuad.getCenter());
     49       g2D.draw(tangent);
     50       tangent = new Line2D.Double(endQ, ctrlQuad.getCenter());
     51       g2D.draw(tangent);
     52 
     53       tangent = new Line2D.Double(startC, ctrlCubic1.getCenter());
     54       g2D.draw(tangent);
     55       tangent = new Line2D.Double(endC, ctrlCubic2.getCenter());
     56       g2D.draw(tangent);
     57     }
     58   }
     59 
     60   // Inner class defining a control point marker
     61   private class Marker {
     62     public Marker(Point2D.Double control)  {
     63       center = control;                                                // Save control point as circle center
     64 
     65       // Create circle around control point
     66       circle = new Ellipse2D.Double(control.x-radius, control.y-radius,
     67                                     2.0*radius, 2.0*radius);
     68     }
     69 
     70       // Draw the marker
     71       public void draw(Graphics2D g2D) {
     72         g2D.draw(circle);
     73       }
     74 
     75      // Get center of marker - the control point position
     76       Point2D.Double getCenter() {
     77         return center;
     78     }
     79 
     80     Ellipse2D.Double circle;                                           // Circle around control point
     81     Point2D.Double center;                                             // Circle center - the control point
     82     static final double radius = 3;                                    // Radius of circle
     83   }
     84 
     85   // Points for quadratic curve
     86   private Point2D.Double startQ = new Point2D.Double(50, 75);          // Start point
     87   private Point2D.Double endQ = new Point2D.Double(150, 75);           // End point
     88   private Point2D.Double control = new Point2D.Double(80, 25);         // Control point
     89 
     90   // Points for cubic curve
     91   private Point2D.Double startC = new Point2D.Double(50, 150);         // Start point
     92   private Point2D.Double endC = new Point2D.Double(150, 150);          // End point
     93   private Point2D.Double controlStart = new Point2D.Double(80, 100);   // 1st cntrl point
     94   private Point2D.Double controlEnd = new Point2D.Double(160, 100);    // 2nd cntrl point
     95   private QuadCurve2D.Double quadCurve;                                // Quadratic curve
     96   private CubicCurve2D.Double cubicCurve;                              // Cubic curve
     97   private CurvePane pane = new CurvePane();                            // Pane to contain curves
     98 
     99    // Markers for control points
    100    private Marker ctrlQuad = new Marker(control);
    101    private Marker ctrlCubic1 = new Marker(controlStart);
    102    private Marker ctrlCubic2 = new Marker(controlEnd);
    103 
    104 }

    HTML文件与上一例同。

  • 相关阅读:
    python的三大控制机构(ifelse、for、while)
    python 异常处理
    《精通javascript》笔记
    IE6与!important
    point
    js 自制滚动条
    《Head first 设计模式》读书笔记
    Asp.net Webform 数据源绑定控件的扩展(懒人的办法):DropDownList
    Asp.net Binarysoft.Library 数据库通用操作层(Binarysoft.Library.Data)
    Asp.net Webform 从项目的数据库设计说起,什么是一个好的数据库设计。
  • 原文地址:https://www.cnblogs.com/mannixiang/p/3488382.html
Copyright © 2011-2022 走看看