⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawcanvas.java

📁 面向对象的设计思想
💻 JAVA
字号:
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

//画布类,具体处理用鼠标画图的事物
public class DrawCanvas extends JPanel {
	private DrawModel model;
	private static int CanvasNo=0;
	private int CanvasId;
	private ArrayList listeners = new ArrayList(10);
	public static final int LIN=1;
	public static final int REC=2;
	public static final int CIR=3;
	public static final int SF=4;
	public static final int MOVE=5;
	private Shape s;
	
	//构造函数
	public DrawCanvas(DrawModel model)
	{
		this.model = model;
	    CanvasId = ++CanvasNo;
	    buildDisplay();
	    model.addModelChangeListener(this);
	   
	}
	private void buildDisplay()
	{
		//super();
		addMouseListener(new MouseHandler());
		addMouseMotionListener(new MouseMotionHandler());
		setBackground(Color.WHITE);
	}
	
	public void addUserGestureListener(DrawController con)
	{
	  
	    listeners.add(con);
	}
	//获得和该被selected的方法
	
	//画图的方法
	public void paint(Graphics g)
	{
		super.paint(g);
		Graphics2D gD=(Graphics2D) g;
		ArrayList<SubShape> shapes=model.getShapes();
		for(int i=0;i<shapes.size();i++)
		{
			int x1=shapes.get(i).x1;
			int x2=shapes.get(i).x2;
			int y1=shapes.get(i).y1;
			int y2=shapes.get(i).y2;
			int x = (x2 > x1 ? x1 : x2);
			int y = (y2 > y1 ? y1 : y2);
			
			switch (shapes.get(i).select){
			case LIN:
				s=new Line2D.Double(x1,y1,x2,y2);
				break;
			case REC:
				s = new Rectangle2D.Double(x,y,Math.abs(x2-x1),Math.abs(y2-y1));
				break;
			case CIR:
				s= new Ellipse2D.Double(x,y,Math.abs(x2-x1),Math.abs(y2-y1));
				break;
			default:
				break;
			}
			gD.setPaint(Color.BLACK);
			gD.draw(s);
		}
	}
	public void processModelChange(ArrayList<SubShape> list)
	{
	     repaint();
	}
	public void refresh(){
		while(true){
			 try {
			      //sleep to give newly created thread chance to run
			      Thread.sleep(1000);    
			    } catch(Exception e) {
			     
			    }
			   this.repaint();
			    
		}
	}
  
	//在点击鼠标时,记录下当时所在点坐标用于绘图
	
	//用于处理鼠标事件
	private class MouseHandler extends MouseAdapter{
		public void mousePressed(MouseEvent e)
		{
			Point point1=e.getPoint();
			int x=point1.x;
			int y=point1.y;
			DrawController con;
			for(int i=0;i<listeners.size();i++)
			{
				con=(DrawController)listeners.get(i);
				con.processPress(x,y);
			}
			
		}
		public void mouseReleased(MouseEvent e)
		{
			Point point2=e.getPoint();
			int x=point2.x;
			int y=point2.y;
			DrawController con;
			for(int i=0;i<listeners.size();i++)
			{
				con=(DrawController)listeners.get(i);
				con.processRelease(x,y);
			}
		}
		public void mouseClick(MouseEvent e){}
	}
	//用于处理鼠标移动的事件
	private class MouseMotionHandler implements MouseMotionListener{
		public void mouseDragged(MouseEvent e)
		{
		}
		public void mouseMoved(MouseEvent e){}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -