用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);
}
}因为包含多个源程序,所以打包上传 下载链接
















