public void arrange(Node aRoot , Point aPoint){
		if(aRoot.getVisiting()==false) aRoot.setLocation(aPoint);
		try {
			Thread.sleep(Constans.SLEEP_TIME);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		this.changed();
		
		int aChildY=aPoint.y;
		int aCount=0;
		for(Node aChildNode : aRoot.getChildrenNode().values()){
			while(aChildY<=ForestModel.underNodeY) aChildY+=18;
			arrange(aChildNode,new Point(aPoint.x+aRoot.getWidth()+Constans.WIDTH_SPACE,aChildY));
			aChildNode.setVisiting();
			aCount++;
			if(aRoot.getChildrenNode().size()<aCount){
				aChildY+=Constans.HEIGHT_SPACE+aRoot.getHeight();
			}
		}
		if(ForestModel.underNodeY<aChildY) ForestModel.underNodeY=aChildY;
		if(aRoot.getVisiting()==false) aRoot.setLocation(aPoint.x,(aChildY+aPoint.y+aRoot.getHeight())/2-(aRoot.getHeight()/2));
		if(aRoot.getParentNode()==null && aRoot.getChildrenNode().size()==1) aRoot.setLocation(aPoint.x,aRoot.getChildrenNode().get(0).getLocation().y);
	}