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

📄 stockpane.java

📁 用于串口通讯测试的工具软件。完全使用java语言编写。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.zcsoft.stock;

import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import com.zcsoft.graphics.line.*;
import com.zcsoft.image.*;
import com.zcsoft.xml.*;

/**
 * 立体仓库仓库绘制组件
 * 立体仓库一般包含一个或多个输送子系统和一个堆垛机子系统(或称货架子系统)。
 * 用于可在该组件上拖动各子系统的相对位置和大小。
 */
public class StockPane extends ShapePane
{

	Image backgroundImage;
	/** 是否处于调试模式 */
	private boolean debug;


	public StockPane()
	{

	}

	/**
	 * 用XML文件配置构建仓库绘制面板
	 * @param root 由XML文件的XML根节点对象。节点标记名为:stock
	 * @param stackerMakers 存储堆垛机绘制器的容器
	 * @param subSystemMakers 存储开关子系统的容器
	 * @return
	 */
	public Device[] configureFromElement(Element root
													 , java.util.List stackerMakers
													 , java.util.List subSystemMakers)
	{
		this.setPreferredSize(this.sizeValue(root.getAttributeValue("prefSize")));
		URL imageURL = getImageURL(root.getAttributeValue("image"));
		if (imageURL != null)
		{
			this.setBackgroundImage(ImageMaker.getCachedImage(imageURL));
		}
		this.setDebug("true".equals(root.getAttributeValue("debug")));

		Iterator children = root.getChildren();
		Point origin = new Point();
		ArrayList devices = new ArrayList();
		DeviceMaker dm;
		while (children.hasNext())
		{
			Element child = (Element)children.next();
			String deviceType = child.getTagName();
			if (deviceType.equals("switchSystem"))
			{
				subSystemMakers.add(createSwitchSytem(devices, child, origin));
				continue;
			}
			else if (deviceType.equals("stacker"))
			{
				dm = this.createStacker(child, origin);
				if (stackerMakers != null)
				{
					stackerMakers.add(dm);
				}
			}
			else if (deviceType.equals("chain"))
			{
				dm = this.createChain(child, origin);
			}
			else if (deviceType.equals("elevator"))
			{
				dm = this.createElevator(child, origin);
			}
			else if (deviceType.equals("allocator"))
			{
				dm = this.createAllocator(child, origin);
			}
			else
			{
				dm = null;
			}
			if (dm != null)
			{
				this.addShapeMaker(dm);
				devices.add(dm.getDevice());
			}
		}
		return (Device[])devices.toArray(new Device[devices.size()]);
	}

	/**
	 * 由XML中的元素定义构建开关系统绘制器对象
	 * @param cachedDevices 用于存储各个开关的数据对象的容器
	 * @param e
	 * @param origin
	 * @return
	 */
	SubSystemMaker createSwitchSytem(java.util.List cachedDevices, Element e, Point origin)
	{
		SubSystemMaker sm = new SubSystemMaker(getImageURL(e.getAttributeValue("image")));
		sm.setLocation(pointValue(e.getAttributeValue("origin"), origin));
		sm.setNormalLocation(pointValue(e.getAttributeValue("normalLocation"), origin));
		sm.setMinimumSize(sizeValue(e.getAttributeValue("minimumSize")));
		sm.setSize(sm.getMinimumSize());
		sm.setName(e.getAttributeValue("name"));
		Iterator switches = e.getChildren("switch");
		DeviceMaker dm;
		while (switches.hasNext())
		{
			dm = createSwitch(sm, (Element)switches.next(), origin);
			sm.addDeviceMakers(dm);
			cachedDevices.add(dm.getDevice());
		}

		return sm;
	}

	/**
	 * 由XML中的元素定义开关绘制器对象
	 *
	 * @param pls 开关数据对象属性变化侦听实现
	 * @param e <switch>元素
	 * @param origin 存储原点坐标的容器(避免构建对象的资源开销)
	 * @return 开关绘制器
	 */
	SwitchMaker createSwitch(java.beans.PropertyChangeListener pls, Element e, Point origin)
	{
		SwitchMaker sm = new SwitchMaker();
		sm.setDevice(new Switch(e.getAttributeValue("id")), pls);
		sm.setLocation(pointValue(e.getAttributeValue("origin"), origin));
		sm.setOnImageURL(getImageURL(e.getAttributeValue("onImage")));
		sm.setOffImageURL(getImageURL(e.getAttributeValue("offImage")));

		return sm;
	}

	/**
	 * 由XML中的元素定义输送机绘制器对象
	 * @param e
	 * @param origin
	 * @return
	 */
	ChainMaker createChain(Element e, Point origin)
	{
		ChainMaker sm = new ChainMaker();
		sm.setDevice(new Chain(e.getAttributeValue("id")));
		sm.setLocation(pointValue(e.getAttributeValue("origin"), origin));
		sm.setImageURL(getImageURL(e.getAttributeValue("image")));
		sm.setSize(sizeValue(e.getAttributeValue("size")));
		sm.setForwardIcon(createDirectionPainter(e.getChild("forwardIcon"), origin));
		sm.setBackwardIcon(createDirectionPainter(e.getChild("backwardIcon"), origin));
		sm.setAheadTrayMaker(createContainerMaker(e.getChild("aheadTrayIcon"), origin));
		sm.setBackTrayMaker(createContainerMaker(e.getChild("backTrayIcon"), origin));

		return sm;
	}

	/**
	 * 由XML中的元素定义升降台绘制器对象
	 * @param e
	 * @param origin
	 * @return
	 */
	ElevatorMaker createElevator(Element e, Point origin)
	{
		ElevatorMaker sm = new ElevatorMaker();
		sm.setDevice(new Elevator(e.getAttributeValue("id")));
		sm.setImageURL(getImageURL(e.getAttributeValue("image")));
		sm.setLocation(pointValue(e.getAttributeValue("origin"), origin));
		sm.setSize(sizeValue(e.getAttributeValue("size")));
		sm.setForwardIcon(createDirectionPainter(e.getChild("forwardIcon"), origin));
		sm.setBackwardIcon(createDirectionPainter(e.getChild("backwardIcon"), origin));
		sm.setUpwardIcon(createDirectionPainter(e.getChild("upwardIcon"), origin));
		sm.setDownwardIcon(createDirectionPainter(e.getChild("downwardIcon"), origin));
		sm.setTrayMaker(createContainerMaker(e.getChild("downViewContainer"), origin));

		return sm;
	}

	/**
	 * 由XML中的元素定义堆垛机绘制器对象
	 * @param e
	 * @param origin
	 * @return
	 */
	StackerMaker createStacker(Element e, Point origin)
	{
		StackerMaker sm = new StackerMaker();
		sm.setDevice(new Stacker(e.getAttributeValue("id")));
		sm.setDownViewImageURL(getImageURL(e.getAttributeValue("downViewImage")));
		sm.setFaceViewImageURL(getImageURL(e.getAttributeValue("faceViewImage")));
		sm.setLiftImageURL(getImageURL(e.getAttributeValue("liftImage")));
		Integer lineNo = IntegerValue(e.getAttributeValue("reversePaintLine"));
		if (lineNo != null)
		{
			sm.setReversePaintLine(lineNo.intValue());
		}
		sm.setDownViewContainer(createContainerMaker(e.getChild("downViewContainer"), origin));
		sm.setFaceViewContainer(createContainerMaker(e.getChild("faceViewContainer"), origin));
		sm.setForwardIcon(createDirectionPainter(e.getChild("forwardIcon"), origin));
		sm.setBackwardIcon(createDirectionPainter(e.getChild("backwardIcon"), origin));
		sm.setUpwardIcon(createDirectionPainter(e.getChild("upwardIcon"), origin));
		sm.setDownwardIcon(createDirectionPainter(e.getChild("downwardIcon"), origin));

		sm.setHorizonalPath(createPath(e.getChild("horizonalPath")));
		sm.setVerticalPath(createPath(e.getChild("verticalPath")));

		return sm;
	}

	/**
	 * 由XML中的元素定义堆垛机绘制器对象
	 * @param e
	 * @param origin
	 * @return
	 */
	AllocatorMaker createAllocator(Element e, Point origin)
	{
		AllocatorMaker sm = new AllocatorMaker();
		sm.setDevice(new Stacker(e.getAttributeValue("id")));
		sm.setImageURL(getImageURL(e.getAttributeValue("image")));
		sm.setContainer(createContainerMaker(e.getChild("downViewContainer"), origin));

		sm.setHorizonalPath(createPath(e.getChild("horizonalPath")));

		return sm;
	}

	/**
	 * 由XML中的元素定义运行方向绘制器对象
	 * @param e
	 * @param location
	 * @return
	 */
	DirectionPainter createDirectionPainter(Element e, Point location)
	{
		if (e == null)
		{
			return null;
		}
		DirectionPainter dp = new DirectionPainter();
		dp.setLocation(pointValue(e.getAttributeValue("location"), location));
		String av = e.getAttributeValue("color");
		if (av != null)
		{
			dp.setColor(Color.decode(av));
		}
		av = e.getAttributeValue("image");
		if (av != null)
		{
			dp.setImage(getCachedImage(av));
		}
		av = e.getAttributeValue("size");
		if (av != null)
		{
			dp.setSize(sizeValue(av));
		}
		av = e.getAttributeValue("direction");
		if (av != null)
		{
			dp.setDirection(av);
		}
		return dp;
	}

	/**
	 *
	 * @param e
	 * @param origin
	 * @return
	 */
	ImageMaker createContainerMaker(Element e, Point origin)
	{
		if (e == null)
		{
			return null;
		}
		ImageMaker im = new ImageMaker(getImageURL(e.getAttributeValue("image")));
		im.setLocation(pointValue(e.getAttributeValue("location"), origin));

		return im;
	}

	/**
	 *
	 * @param e
	 * @return
	 */

⌨️ 快捷键说明

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