比如画直线、椭圆、矩形等的,
而且可以改变直线的长度,椭圆和矩形的大小,
还可以移动他们的位置的谢谢

解决方案 »

  1.   

    有个这样的例子确实很好,研究一下也好,不过我没有。
    楼主如果得到,给我也发一下吧,谢谢了。
    [email protected]
      

  2.   

    to z_l(等你) :
     好,如果找到了发给你
    我现在自己在做。
      

  3.   

    这个我以前上java课最后老师要我做过,楼主可以参考jdk带的例子
      

  4.   

    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.applet.*;
    import java.util.*;public class SharpApplet extends Applet implements ItemListener {
    /**
     * Comment for <code>serialVersionUID</code>
     */
    private static final long serialVersionUID = 1L;
    private Choice comboBox;
    private ShapeCanvas canvas;


    public void init(){
    setLayout( new BorderLayout());
    canvas = new ShapeCanvas();
    add(canvas,"Center");
    comboBox = new Choice();
    comboBox.addItem("Line");
    comboBox.addItem("Rectangle");
    comboBox.addItem("RoundRectangle");
    comboBox.addItem("Ellipse");
    comboBox.addItem("Polygon");
    comboBox.addItem("QuadCurve");
    comboBox.addItem("CubicCurve");
    comboBox.addItemListener(this);
    add(comboBox,"North");
    } public void itemStateChanged(ItemEvent e) {
    ShapeMaker sharpMaker;
    String s = comboBox.getSelectedItem();
    if(s=="line")
    sharpMaker = (ShapeMaker)(new LineMaker());
    else if(s=="Rectangle")
    sharpMaker = (ShapeMaker)(new RectangleMaker());
    else if(s=="RoundRectangle")
    sharpMaker = (ShapeMaker)(new RoundRectangleMaker());
    else if(s=="Ellipse")
    sharpMaker = (ShapeMaker)(new EllipseMaker());
    else if(s=="Polygon")
    sharpMaker = (ShapeMaker)(new PolygonMaker());
    else if(s=="QuadCurve")
    sharpMaker = (ShapeMaker)(new QuadCurveMaker());
    else
    sharpMaker = (ShapeMaker)(new CubicCurveMaker());
    canvas.setSharpMaker(sharpMaker);

    }}class ShapeCanvas extends Canvas{
    /**
     * Comment for <code>serialVersionUID</code>
     */
    private static final long serialVersionUID = 1L;
    private Point2D[] points;
    private static Random generator = new Random();
    private static int SIZE = 10;
    private int current;
    private ShapeMaker shapeMaker;

    public ShapeCanvas(){
    addMouseListener(new MouseHandler());
    addMouseMotionListener(new MouseMotionHandler());
    current=-1;
    }

    public void setSharpMaker(ShapeMaker aShapeMaker){
    shapeMaker =  aShapeMaker;
    int n = shapeMaker.getPointCount();
    points = new Point2D[n];
    for(int i=0;i<n;i++){
    double x = generator.nextDouble()*getWidth();
    double y = generator.nextDouble()*getHeight();
    points[i] = new Point2D.Double(x,y);
    }
    repaint();
    }

    public void paint(Graphics g){
    if(points == null) return;
    Graphics2D g2 = (Graphics2D)g;
    for(int i = 0;i<points.length;i++){
    double x = points[i].getX() - SIZE/2;
    double y = points[i].getY() - SIZE/2;
    g2.fill(new Rectangle2D.Double(x,y,SIZE,SIZE));
    }
    g2.draw(shapeMaker.makeShape(points));
    }

    public class MouseHandler extends MouseAdapter{
    public void mousePressed(MouseEvent e){
    Point p=e.getPoint();
    for(int i = 0;i<points.length;i++){
    double x = points[i].getX() - SIZE/2;
    double y = points[i].getY() - SIZE/2;
    Rectangle2D r = new Rectangle2D.Double(x,y,SIZE,SIZE);
    if(r.contains(p)){
    current = 1;
    return;
    }
    }
    }

    public void mouseRelease(MouseEvent e){
    current = -1;
    }
    }

    public class MouseMotionHandler extends MouseMotionAdapter{
    public void mouseDragged(MouseEvent e){
    if(current == -1) return;
    points[current] = e.getPoint();
    repaint();
    }
    }
    }abstract class ShapeMaker{
    private int pointCount;

    public ShapeMaker(int apointCount){
    pointCount = apointCount;
    }

    public int getPointCount(){
    return pointCount;
    }

    public abstract Shape makeShape(Point2D[] p);
    }class LineMaker extends ShapeMaker{
    public LineMaker(){
    super(2);
    }

    public Shape makeShape(Point2D[] p){
    return new Line2D.Double(p[0],p[1]);
    }
    }class RectangleMaker extends ShapeMaker{
    public RectangleMaker(){
    super(2);
    }

    public Shape makeShape(Point2D[] p){
    Rectangle2D s = new Rectangle2D.Double();
    s.setFrameFromDiagonal(p[0],p[1]);
    return s;
    }
    }class RoundRectangleMaker extends ShapeMaker{
    public RoundRectangleMaker(){
    super(2);
    }

    public Shape makeShape(Point2D[] p){
    RoundRectangle2D s = new RoundRectangle2D.Double(0,0,0,0,20,20);
    s.setFrameFromDiagonal(p[0],p[1]);
    return s;
    }
    }class EllipseMaker extends ShapeMaker{
    public EllipseMaker(){
    super(2);
    }

    public Shape makeShape(Point2D[] p){
    Ellipse2D s = new Ellipse2D.Double();
    s.setFrameFromDiagonal(p[0],p[1]);
    return s;
    }
    }/*class ArcMaker extends ShapeMaker{
    public ArcMaker(){
    super(4);
    }

    Shape makeShape(Point2D[] p){
    double centerX = (p[0].getX() + p[1].getX())/2;
    double centerY = (p[0].getY() + p[1].getY())/2;
    double width = Math.abs(p[1].getX()-p[0].getX());
    double height = Math.abs(p[1].getY()-p[1].getY());

    double distortedStartAngle = Math.toDegrees(Math.atan2(-(p[2].getY()-centerY)*width,(p[2].getX()-centerX)*height));
    double distortedEndAngle = Math.toDegrees(Math.atan2(-(p[3].getY()-centerY)*width,(p[3].getX()-centerX)*height));
    double dis
    }
    }*/class PolygonMaker extends ShapeMaker{
    public PolygonMaker(){
    super(6);
    }

    public Shape makeShape(Point2D[] p){
    GeneralPath s = new GeneralPath();
    s.moveTo((float)p[0].getX(),(float)p[0].getY());
    for(int i=1;i<p.length;i++){
    s.lineTo((float)p[i].getX(),(float)p[i].getY());
    }
    s.closePath();
    return s;
    }
    }class QuadCurveMaker extends ShapeMaker{
    public QuadCurveMaker(){
    super(3);
    }

    public Shape makeShape(Point2D[] p){
    return new QuadCurve2D.Double(p[0].getX(),p[0].getY(),p[1].getX(),p[1].getY(),p[2].getX(),p[2].getY());
    }}class CubicCurveMaker extends ShapeMaker{
    public CubicCurveMaker(){
    super(4);
    }

    public Shape makeShape(Point2D[] p){
    return new CubicCurve2D.Double(p[0].getX(),p[0].getY(),p[1].getX(),p[1].getY(),p[2].getX(),p[2].getY(),p[3].getX(),p[3].getY());
    }
    }以前照书上敲的个例子,呵
      

  5.   

    sun上有一个Draw for app,有源码,下一个去.