?? 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 + -