用Java 实现画图,具体实现画直线、曲线、矩形以及圆。

代码架构为MVC模式
分为三大部分:
1.domain(实现继承抽象类DrawObject来画出不同图形的具体操作)
以画直线为例:

import java.awt.geom.Line2D;

import common.DrawObject;

public class DrawLine extends DrawObject{

    public DrawLine(){

        super();
        this.shape = new Line2D.Double();
    }


    @Override
    public void setData(double x, double y) {
        // TODO Auto-generated method stub
        this.shape = new Line2D.Double(startx, starty, x , y);
        view.repaint();
    }
}

2.common(包含controller以及实现画图形的抽象类DrawObject)

import java.awt.Graphics2D;
import java.awt.Shape;

import javax.swing.JPanel;

public abstract class DrawObject {
    protected double startx;
    protected double starty;

    protected double endx;
    protected double endy;

    protected Shape shape;

    protected JPanel view;

    protected boolean over = false;

    public boolean isOver() {
        return over;
    }
    public void initial(double x,double y){
        this.endx = this.startx = x;
        this.endy = this.starty = y;
    }
    public void setView(JPanel view){
        this.view = view;
    }

    public Shape getShape() {
        return shape;
    }

    public void setShape(Shape shape) {
        this.shape = shape;
    }

    //public abstract void setData(double startx, double starty, double endx, double endy);
    public abstract void setData(double x, double y);       //鼠标移动过程中调用

    public void draw(Graphics2D g){
        if(shape != null)
            g.draw(shape);
    }

}

controller代码在下载的包中。
3.view(实现了DrawView以及MianFrame作为程序的主入口)

DrawView:
protected void paintComponent(Graphics g){}函数实现自己画自己的功能)

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.util.ArrayList;

import javax.swing.JPanel;

import common.DrawObject;

public class DrawView extends JPanel{
    private DrawObject object ;
    private ArrayList<Shape> shapes = new ArrayList<Shape>();

    public void setShapes(ArrayList<Shape> shapes) {
        this.shapes = shapes;
        repaint();
    }

    public void setObject(DrawObject object){
        this.object = object;
    }

    protected void paintComponent(Graphics g) {
        // TODO Auto-generated method stub
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        for(int i = 0 ; i < shapes.size() ; i ++){
            g2.draw(shapes.get(i));
        }
        if(object != null)
            object.draw(g2);
    }
}

因为包含多个源程序,所以打包上传 下载链接