📄 myline.java~63~
字号:
package myshape;/** * Title: * Description: * Copyright: Copyright (c) 2002 * Company: * @author * @version 1.0 */import java.awt.*;import myframe.*;public class MyLine extends MyShapeAdapter{ private MyPoint startPoint,endPoint; //private int radius; public MyLine(){ } public MyLine(MyPoint start,MyPoint end){ startPoint=start; endPoint=end; } private Color color=super.defaultColor; private Color defaultColor=super.defaultColor; public void setColor(Color c){ color=c; } public Color getColor(){ return color; } public void setDefaultColor(Color c){ defaultColor=c; } public Color getDefaultColor(){ return defaultColor; } public void paint(Graphics g){ int x1,y1,x2,y2; double[] x=new double[4]; double y[]=new double[4]; int width=DrawCavans.width; int height=DrawCavans.height; //startPoint.paint(g); //endPoint.paint(g); x1=endPoint.getX(); y1=endPoint.getY(); if(endPoint.getX()==startPoint.getX()){ y[0]=0;x[1]=x[0]=endPoint.getX();y[1]=height;x[2]=x[3]=-1; } else if(endPoint.getY()==startPoint.getY()){ x[0]=0;y[1]=y[0]=endPoint.getY();x[1]=width;x[2]=x[3]=-1; } else{ double tan=(y1-startPoint.getY())*1.0/(x1-startPoint.getX()); x[0]=x1-y1/tan; y[0]=0; x[1]=width; y[1]=y1+tan*(x[1]-x1); y[2]=height; x[2]=x1+(y[2]-y1)*1.0/tan; x[3]=0; y[3]=y1-tan*x1; } int a[]=new int[4]; int j=0; for(int i=0;i<4;i++){ // System.out.println("x= "+x[i]+" y= "+y[i]); if(x[i]>=0 && x[i]<width+1 && y[i]>=0 && y[i]<height+1){ a[j++]=i; } } g.setColor(color); g.drawLine((int)x[a[0]],(int)y[a[0]],(int)x[a[1]],(int)y[a[1]]); } public MyShape getShape(){//深度的克隆 MyLine line1=(MyLine)this.clone(); line1.startPoint=(MyPoint)startPoint.clone(); line1.endPoint=(MyPoint)endPoint.clone(); //MyLine l=(MyLine)this.clone(); //l.startPoint.moveObject(startPoint.getX()+4,centerPoint.getY()+4); //l.endPoint.moveObject(endPoint.getX()+4,endPoint.getY()+4); return line1; } public void moveObject(int x,int y){ if(movedPoint!=null){ if(!moveLine){ //movedPoint.moveObject(x,y); } else{ int tempx=x-movedPoint.getX(); int tempy=y-movedPoint.getY(); movedPoint=new MyPoint(x,y); startPoint.moveObject(tempx+startPoint.getX(),tempy+startPoint.getY()); endPoint.moveObject(tempx+endPoint.getX(),tempy+endPoint.getY()); } } } public void moveObject(MyShape s,int x,int y){ MyPoint p1=(MyPoint)s; int tempx=startPoint.getX()-endPoint.getX(); int tempy=startPoint.getY()-endPoint.getY(); if(tempx==0){ p1.moveObject(startPoint.getX(),y); } else if(tempy==0){ p1.moveObject(x,startPoint.getY()); } else{ double k1=tempy*1.0/tempx; double k2=-1/k1; double temp1=startPoint.getY()-k1*startPoint.getX(); double temp2=y-k2*x; p1.moveObject((int)((temp1-temp2)/(k2-k1)),(int)((k2*temp1-k1*temp2)/(k2-k1))); } } private MyPoint movedPoint; private boolean moveLine=true; public boolean getChanged(){return !moveLine;} public boolean nearTo(int x,int y){ //centerPoint.attachToOthers=false; movedPoint=null; if(startPoint.nearTo(x,y)){ // centerPoint.attachToOthers=true; // movedPoint=startPoint; moveLine=false; return false; } if(endPoint.nearTo(x,y)){ //movedPoint=endPoint; moveLine=false; return false; } //centerPoint.attachToOthers=true; int tempx=(startPoint.getX()-x)*(endPoint.getY()-y); int tempy=(startPoint.getY()-y)*(endPoint.getX()-x); tempx=(int)Math.sqrt(Math.abs(tempx-tempy)); // System.out.print("OK "+tempx); if(tempx<20){ movedPoint=new MyPoint(x,y); moveLine=true; return true; } return false; } public String toString(){ String s="直线 "; return s; } public MyPoint getPoint(){ return movedPoint; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -