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

📄 paintcanvas.java

📁 一个简易的java画图软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	}
	/**
	 * 向网络上的其他客户更新当前图形
	 */
	public void updateNetFiguare(String mesHeader) {
		if (currentShape != null)
			updateNetFiguare(mesHeader, currentShape);
	}
	/**
	 * 向网络上的其他客户更新指定图形
	 */
	public void updateNetFiguare(String mesHeader, AbstractFiguare fig) {
		if (view.IsConnected()) {
			if (fig != null) {
				view.sendMessage(new NetMessage(mesHeader, fig.clone()));
				fig.hasUpdatedNet();
			} else {
				if (Application.DEBUG > 6)
					System.out.println("客户端请求发送一个空的图形");
			}
		}

	}
	/**
	 * 向网络上的其他客户更新指定图形,除非它没有被修改过
	 */
	public void updateAvailableNetFiguare(String mesHeader, AbstractFiguare fig) {
		if (view.IsConnected() && fig != null) {
			if (fig.isChanged()) {
				view.sendMessage(new NetMessage(mesHeader, fig.clone()));
				fig.hasUpdatedNet();
			}
		}
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		if (drawingShape == AbstractFiguare.ARROW) {
			AbstractFiguare newMoveOnFiguare;
			if ((newMoveOnFiguare = getSelectedShape(e.getX(), e.getY())) != null) {
				setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
				boolean needRepaint = (moveOnFiguare != newMoveOnFiguare);
				// if(moveOnFiguare==null || moveOnFiguare!=newMoveOnFiguare){
				moveOnFiguare = newMoveOnFiguare;
				if (needRepaint)
					repaint();
				// }
			} else {
				moveOnFiguare = null;
				setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
				repaint();
			}

			int style;

			if (currentShape == null)
				return;
			if ((style = currentShape.getDirectionRect(e.getX(), e.getY())) != -1) {
				setCursor(currentShape.getCursor(style));
			}

		}
	}

	public Vector<AbstractFiguare> getFiguares() {
		return drawingOps;
	}

	private Color strokeColor, fillColor;
	private int drawingShape;
	private AbstractFiguare currentShape, moveOnFiguare;
	private Vector<AbstractFiguare> drawingOps = new Vector<AbstractFiguare>();
	
	/**
	 * 从网络上接受到一个消息包
	 */
	public void receiveFiguare(NetMessage netMes) {
		AbstractFiguare fig = (AbstractFiguare) netMes.messageContent;
		try {
			if (netMes.messageHeader.equals(NetMessage.MES_NEW_FIGUARE)) {// 新建了一个图形
				if (!drawingOps.contains(fig))
					drawingOps.add(fig);
				else {
					System.out.println("原来就有1个了");
				}
				putClientProperty(View.CANVAS_CHANGED_PROPERTY, "服务器添加图形:"
						+ fig.serialId);
			} else if (netMes.messageHeader.equals(NetMessage.MES_DEL_FIGUARE)) {
				drawingOps.remove(fig);
				putClientProperty(View.CANVAS_CHANGED_PROPERTY, "服务器删除图形:"
						+ fig.serialId);
			} else if (netMes.messageHeader
					.equals(NetMessage.MES_CLEAR_FIGUARE)) {
				drawingOps.clear();
				putClientProperty(View.CANVAS_CHANGED_PROPERTY, "服务器清除所有图形:"
						+ fig.serialId);
			} else if (netMes.messageHeader
					.equals(NetMessage.MES_CHANGE_FIGUARE)) {
				int index = drawingOps.indexOf(fig);
				if (index != -1) {
					putClientProperty(View.CANVAS_CHANGED_PROPERTY, "服务器更新图形:"
							+ fig.serialId);
					drawingOps.setElementAt(fig, index);
				} else {
					if (Application.DEBUG > 6)
						System.out.println("服务器尝试更新一个不存在的图形" + fig.serialId);
				}
			} else if (netMes.messageHeader
					.startsWith(NetMessage.MES_UPDOWN_FIGUARE_PREFIX)) {
				String str = netMes.messageHeader;
				if (str.equals(NetMessage.MES_HIGHEST_FIGUARE)) {
					toHighestLayer(fig, false);
				}
				if (str.equals(NetMessage.MES_HIGHER_FIGUARE)) {
					toHigherLayer(fig, false);
				} else if (str.equals(NetMessage.MES_LOWER_FIGUARE)) {
					toLowerLayer(fig, false);
				} else if (str.equals(NetMessage.MES_LOWEST_FIGUARE)) {
					toLowestLayer(fig, false);
				} else {
					if (Application.DEBUG > 6)
						System.out.println("服务器的移动层次操作错误" + fig.serialId);
				}
			}

			if (fig.equals(currentShape)) {
				currentShape.setSelect(false);
			}
			if (fig.equals(moveOnFiguare)) {
				moveOnFiguare = null;
			}
			repaint();
		} catch (NullPointerException e) {
			if (Application.DEBUG > 3)
				System.out.println("服务器发送了一个null的图形");
		}
		repaint();
	}
	
	/**
	 * 获取所有图形
	 */
	public Vector<AbstractFiguare> getAllFiguares() {
		return drawingOps;
	}
	
	/**
	 * 选择在这个位置上的图形
	 */
	public void selectShapeInLocation(double x, double y) {
		AbstractFiguare d = getSelectedShape(x, y);

		if (currentShape != null) {
			currentShape.setSelect(false);
		}
		if (d != null) {
			currentShape = d;
			currentShape.setSelect(true);
			currentShape.willMoveFromHere(x, y);
		} else {
			currentShape = null;
		}
		repaint();
	}
	
	/**
	 * 设置当前图形为fig
	 */
	public void setCurrentShape(AbstractFiguare fig) {

		if (drawingOps.contains(fig)) {
			if (currentShape != null) {
				currentShape.setSelect(false);
			}

			currentShape = fig;
			currentShape.setSelect(true);
			repaint();
		}
	}

	/**
	 * 将指定图形移至顶层
	 */
	public void toHighestLayer(AbstractFiguare fig, boolean needUpdateNet) {
		int index = drawingOps.indexOf(fig);
		if (index != -1 && index < drawingOps.size() - 1) {
			drawingOps.remove(index);
			drawingOps.add(fig);
			if (needUpdateNet)
				updateNetFiguare(NetMessage.MES_HIGHEST_FIGUARE, fig);
			putClientProperty(View.CANVAS_CHANGED_PROPERTY, fig.serialId
					+ ":移至顶层");
			repaint();

		}
	}
	/**
	 * 将指定图形上移一层
	 */
	public void toHigherLayer(AbstractFiguare fig, boolean needUpdateNet) {
		int index = drawingOps.indexOf(fig);
		if (index != -1 && index < drawingOps.size() - 1) {
			drawingOps.setElementAt(drawingOps.elementAt(index + 1), index);
			drawingOps.setElementAt(fig, index + 1);
			if (needUpdateNet)
				updateNetFiguare(NetMessage.MES_HIGHER_FIGUARE, fig);
			putClientProperty(View.CANVAS_CHANGED_PROPERTY, fig.serialId
					+ ":上移一层");
			repaint();
		}
	}
	/**
	 * 将指定图形下移一层
	 */
	public void toLowerLayer(AbstractFiguare fig, boolean needUpdateNet) {
		int index = drawingOps.indexOf(fig);
		if (index > 0) {
			drawingOps.setElementAt(drawingOps.elementAt(index - 1), index);
			drawingOps.setElementAt(fig, index - 1);
			if (needUpdateNet)
				updateNetFiguare(NetMessage.MES_LOWER_FIGUARE, fig);
			putClientProperty(View.CANVAS_CHANGED_PROPERTY, fig.serialId
					+ ":下移一层");
			repaint();
		}
	}
	/**
	 * 将指定图形移至底层
	 */
	public void toLowestLayer(AbstractFiguare fig, boolean needUpdateNet) {
		int index = drawingOps.indexOf(fig);
		if (index > 0) {
			drawingOps.remove(index);
			drawingOps.add(0, fig);
			if (needUpdateNet)
				updateNetFiguare(NetMessage.MES_LOWEST_FIGUARE, fig);
			putClientProperty(View.CANVAS_CHANGED_PROPERTY, fig.serialId
					+ ":移至低层");
			repaint();
		}
	}
	/**
	 * 获取指定fig的层次
	 */
	public int getFiguareLayer(AbstractFiguare fig) {
		return drawingOps.indexOf(fig);
	}

	/**
	 * 移动当前图形
	 */
	public void translateCurrentFiguare(int dx, int dy) {
		System.out.println(currentShape);
		if (currentShape == null)
			return;
		currentShape.translate(dx, dy);
		updateNetFiguare(NetMessage.MES_CHANGE_FIGUARE);
		repaint();
		putClientProperty(View.CANVAS_CHANGED_PROPERTY, currentShape.serialId
				+ ":键盘控制移动 ");
	}

	/**
	 * 选择当前图形
	 * @param theta
	 */
	public void rotateCurrentFiguare(double theta) {
		if (currentShape == null)
			return;
		currentShape.rotate(theta);
		updateNetFiguare(NetMessage.MES_CHANGE_FIGUARE);
		repaint();
		putClientProperty(View.CANVAS_CHANGED_PROPERTY, currentShape.serialId
				+ ":键盘控制旋转 ");
	}

	/**
	 * 删除当前图形
	 */
	public void delCurrentFiguare() {
		delFiguare(currentShape);
		currentShape = null;
	}

	/**
	 * 删除指定的图形
	 * @param fig 指定的图形
	 */
	public void delFiguare(AbstractFiguare fig) {
		if (fig == null)
			return;
		if (fig.isSelect()) {
			fig.setSelect(false);
		}
		if (moveOnFiguare!=null && moveOnFiguare.equals(fig)) {
			moveOnFiguare = null;
		}
		updateNetFiguare(NetMessage.MES_DEL_FIGUARE, fig);
		repaint();
		putClientProperty(View.CANVAS_CHANGED_PROPERTY, fig.serialId + ":被删除 ");
		drawingOps.remove(fig);
		fig = null;
	}

	/**
	 * 剪切当前的图形
	 * @return 剪切的图形
	 */
	public AbstractFiguare cutFiguare() {
		if(currentShape==null)return null;
		AbstractFiguare figuare=(AbstractFiguare)currentShape.clone();
		delCurrentFiguare();
		return figuare;
	}

	/**
	 * 复制当前的图形
	 * @return 复制的图形
	 */
	public AbstractFiguare copyFiguare() {
		if(currentShape==null)return null;
		return (AbstractFiguare)currentShape.clone();
	}

	/**
	 * 粘贴指定的图形
	 */
	public void pasteFiguare(AbstractFiguare fig) {
		if(fig!=null){
			drawingOps.add(fig);
			fig.serialId=getNetName()+(++AbstractFiguare.figuareNum);
			updateNetFiguare(NetMessage.MES_NEW_FIGUARE	, fig);
		}
	}

}

⌨️ 快捷键说明

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