📄 drawcanvas.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 + -