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

📄 linefigure.java

📁 java实现的版画图程序
💻 JAVA
字号:
package drawfigure;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: </p> * @author unascribed * @version 1.0 */import java.awt.*;import java.awt.geom.*;public class LineFigure extends Figure implements Cloneable {	//两个可用来改变大小的控制块矩形	private ControlRect controlRect1, controlRect2;	public ControlRect getControlRect1() {		return controlRect1;	}	public void setControlRect1(ControlRect rect1) {		controlRect1 = rect1;		if (controlRect1 != null && controlRect2 != null) {			adjustContrlRectPosi(); //调整		}	}	public void setControlRect2(ControlRect rect2) {		controlRect2 = rect2;		if (controlRect1 != null && controlRect2 != null) {			adjustContrlRectPosi(); //调整		}	}	public ControlRect getControlRect2() {		return controlRect2;	}	public void setStartPoint(Point2D start) {		super.setStartPoint(start);		setControlRect1(new ControlRect(start));	}	public void setEndPoint(Point2D end) {		super.setEndPoint(end);		setControlRect2(new ControlRect(end));	}	public LineFigure() {	}	public LineFigure(Point2D p) {		super(p);	}	public Object clone() {		LineFigure lineFigure = new LineFigure();		lineFigure.setStartPoint((Point2D) getStartPoint().clone());		lineFigure.setEndPoint((Point2D) getEndPoint().clone());		return lineFigure;	}	public void draw(Graphics g) {		Graphics2D g2 = (Graphics2D) g;		g2.draw(			new Line2D.Double(				getStartPoint().getX(),				getStartPoint().getY(),				getEndPoint().getX(),				getEndPoint().getY()));		if (isSelected()) {			Color oldColor = g2.getColor();			g2.setColor(Color.black);			controlRect1.paint(g2);			controlRect2.paint(g2);			g2.setColor(oldColor);		}	}	/**  	 * 返回点p所在的控制块,如果不在,返回null	 *  (non-Javadoc)	 * @see drawfigure.Figure#pointInResizeControl(java.awt.Point)	 */	public boolean pointInControlRect(Point2D p) {		if (controlRect1.pointInside(p))			return true;		if (controlRect2.pointInside(p))			return true;		return false;	}	public ControlRect getControlRect(Point2D p) {		if (controlRect1.pointInside(p))			return controlRect1;		if (controlRect2.pointInside(p))			return controlRect2;		return null;	}	/**		*  (non-Javadoc)		* @see drawfigure.Figure#resize(java.awt.Graphics, java.awt.Point)		*/	/*	public void resize(Graphics g,double offsetX,double offsetY) {			this.draw(g);					}	*/	public boolean pointInside(Point2D p) {		double maxX, maxY, minX, minY;		double k, b;		maxX = Math.max(getStartPoint().getX(), getEndPoint().getX());		minX = Math.min(getStartPoint().getX(), getEndPoint().getX());		maxY = Math.max(getStartPoint().getY(), getEndPoint().getY());		minY = Math.min(getStartPoint().getY(), getEndPoint().getY());		if (maxX - minX < 5) { //如果是垂直线			return (Math.abs(p.getX() - maxX)) <= 5				&& (p.getY() < maxY)				&& (p.getY() > minY);		} else if (maxY - minY < 5) { //如果是水平线			return (Math.abs(p.getY() - maxY) <= 5)				&& (p.getX() < maxX)				&& (p.getX() > minX);		} else { //根据公式判断			//判断公式为:y = k * x + b  斜率:k = (y2 - y1) / (x2 - x1) y轴截距:b = y1 - k * x1			k =				(double) (getEndPoint().getY() - getStartPoint().getY())					/ (getEndPoint().getX() - getStartPoint().getX());			b = (double) getStartPoint().getY() - k * getStartPoint().getX();			if ((p.getY() >= (k * p.getX() + b) - 5)				&& (p.getY() <= (k * p.getX() + b) + 5)				&& (p.getX() >= minX)				&& (p.getX() <= maxX)				&& (p.getY() >= minY)				&& (p.getY() <= maxY)) {				return true;			}		}		return false;	}	public void setStartEndPoint(Point2D start, Point2D end) {		setStartPoint(start);		setEndPoint(end);		controlRect1 = new ControlRect(start);		controlRect2 = new ControlRect(end);	}/*	public Cursor getCursor(Point2D p) {		ControlRect ctrl = this.getControlRect(p);		if (ctrl != null) {			return ctrl.getCursor();		}		return new Cursor(Cursor.DEFAULT_CURSOR);	}*/	/**	 * 调整控制块的位置属性,如果本图形形状改变是,需要使用	 * 比如,有形状'\'转换成'/',那么原先控制块的属性就发生变化	 */	void adjustContrlRectPosi() {		if((getControlRect1()==null)||(getControlRect2()==null)){			return;		}		/*if (controlRect1.getCenter().getX()			== controlRect2.getCenter().getX()) {			controlRect1.setPosition(ControlRect.TOP_POSITION);			controlRect2.setPosition(ControlRect.BOTTOM_POSITION);			return;		}*/		/*		if (controlRect1.getCenter().getY()			== controlRect2.getCenter().getY()) {			controlRect1.setPosition(ControlRect.LEFT_POSITION);			controlRect2.setPosition(ControlRect.RIGHT_POSITION);			return;		}*/		//如果块1在左边		if (controlRect1.getCenter().getX()			< controlRect2.getCenter().getX()) {			//如果块1在左面			if (controlRect1.getCenter().getY()				> controlRect2.getCenter().getY()) {				controlRect1.setPosition(ControlRect.LEFT_BOTTOM_POSITION);				//左下				controlRect2.setPosition(ControlRect.RIGHT_TOP_POSITION);			} else {				controlRect1.setPosition(ControlRect.LEFT_TOP_POSITION); //左上				controlRect2.setPosition(ControlRect.RIGHT_BOTTOM_POSITION);			}		} else {			//		如果块1在右面			if (controlRect1.getCenter().getY()				> controlRect2.getCenter().getY()) {				controlRect1.setPosition(ControlRect.RIGHT_BOTTOM_POSITION);				//右下				controlRect2.setPosition(ControlRect.LEFT_TOP_POSITION);			} else {				controlRect1.setPosition(ControlRect.RIGHT_TOP_POSITION); //右上				controlRect2.setPosition(ControlRect.LEFT_BOTTOM_POSITION);			}		}	}}

⌨️ 快捷键说明

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