📄 drawsrmodel.java
字号:
import java.awt.Color;
import java.net.*;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.*;
import javax.swing.JOptionPane;
import java.util.*;
public class DrawSrModel implements DrawModel
{
// model data
private int selected;
private ArrayList<SubShape> shapes;
private Shape s;
private SubShape now;
private int rec,tmpX1,tmpY1 ;
private double w,h;
private boolean jug=false;
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;
// model listener management data structures
//private ArrayList<Socket> mlisteners ;
private ArrayList listeners = new ArrayList(10);
public DrawSrModel()
{
selected=LIN;
shapes=new ArrayList<SubShape>();
//mlisteners=new ArrayList<DrawController> ();
}
// state query methods
public void setSel(int x)
{
selected=x;
}
public void setP1(int x,int y)
{
if(selected==SF)
{
jug=false;
SubShape tmp=null;
for(int i=0;i<shapes.size();i++)
{
tmp=shapes.get(i);
int xs=(tmp.x2 > tmp.x1 ? tmp.x1 : tmp.x2);
int ys=(tmp.y2 > tmp.y1 ? tmp.y1 : tmp.y2);
int xe=(tmp.x2 < tmp.x1 ? tmp.x1 : tmp.x2);
int ye=(tmp.y2 < tmp.y1 ? tmp.y1 : tmp.y2);
if(xs<=x&&xe>=x&&ys<=y&&ye>=y)
{
System.out.println("Shape "+i);
jug=true;
rec=i;
w=Math.abs(tmp.x1-tmp.x2);
h=Math.abs(tmp.y1-tmp.y2);
if(tmp.select==LIN){
tmpX1=tmp.x1;
tmpY1=tmp.y1;
}
else{
tmpX1=xs;
tmpY1=ys;
}
}
}
if (jug==false)
{
JOptionPane.showMessageDialog(null,"选择的点不在图形内,请重新选择^_^");
return;
}
}
else if(selected==MOVE)
{
jug=false;
SubShape tmp=null;
for(int i=0;i<shapes.size();i++)
{
tmp=shapes.get(i);
int xs=(tmp.x2 > tmp.x1 ? tmp.x1 : tmp.x2);
int ys=(tmp.y2 > tmp.y1 ? tmp.y1 : tmp.y2);
int xe=(tmp.x2 < tmp.x1 ? tmp.x1 : tmp.x2);
int ye=(tmp.y2 < tmp.y1 ? tmp.y1 : tmp.y2);
if(xs<=x&&xe>=x&&ys<=y&&ye>=y)
{
jug=true;
rec=i;
tmpX1=xs;
tmpY1=ys;
w=Math.abs(tmp.x1-tmp.x2);
h=Math.abs(tmp.y1-tmp.y2);
}
}
if (jug==false)
{
JOptionPane.showMessageDialog(null,"选择的点不在图形内,请重新选择^_^");
return;
}
}
else{
tmpX1=x;
tmpY1=y;}
}
public int getP1x(){
return tmpX1;
}
public int getP1y(){
return tmpY1;
}
//用于打开文件时获得图形信息
public ArrayList<SubShape> getShapes()
{
return (ArrayList<SubShape>)shapes.clone();
}
//用于添加在一张画布中所要记录下的图形
public void addShapes(SubShape shape)
{
shapes.add(shape);
}
//在新建时 倾空桌布上所记录的图形
public ArrayList<SubShape> deletShapes()
{
shapes=new ArrayList<SubShape>();
//fireModelChangeEvent();
return shapes;
}
// listener registration method
public void addModelChangeListener(DrawCanvas canvas)
{
listeners.add(canvas);
}
public ArrayList<SubShape> add(int x1,int y1,int x2,int y2)
{
int x,y,xs,ys;
switch (selected) {
case LIN:
now=new SubShape(selected,x1,y1,x2,y2);
addShapes(now);
break;
case REC:
now=new SubShape(selected,x1,y1,x2,y2);
addShapes(now);
break;
case CIR:
now=new SubShape(selected,x1,y1,x2,y2);
addShapes(now);
break;
case SF:
if(shapes.get(rec).select==LIN)
now = new SubShape(LIN,tmpX1,tmpY1,x2,y2);
else if(shapes.get(rec).select==REC)
now = new SubShape(REC,tmpX1,tmpY1, x2,y2);
else if(shapes.get(rec).select==CIR)
now = new SubShape(CIR,tmpX1,tmpY1, x2,y2);
shapes.remove(rec);
shapes.add(now);
break;
case MOVE:
if(shapes.get(rec).select==LIN)
{
x=(int)(x2-w/2);
y=(int)(y2-h/2);
xs=(int)(x2+w/2);
ys=(int)(y2+h/2);
now = new SubShape(LIN,x,y,xs,ys);
}
else if(shapes.get(rec).select==REC)
{
x=(int)(x2-w/2);
y=(int)(y2-h/2);
xs=(int)(x2+w/2);
ys=(int)(y2+h/2);
now = new SubShape(REC,x, y, xs,ys);
}
else if(shapes.get(rec).select==CIR)
{
x=(int)(x2-w/2);
y=(int)(y2-h/2);
xs=(int)(x2+w/2);
ys=(int)(y2+h/2);
now = new SubShape(CIR,x, y, xs,ys);
}
shapes.remove(rec);
shapes.add(now);
break;
default:
break;
}
return shapes;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -