`

ASWing实现中拖放

阅读更多

<!--StartFragment -->

 下面这个实例是将相应的物品拖放指定面板中,本例用到了MVC模式

物品为分为上衣和裤子,有三个面板Panel,一个容纳上衣的面板,一个容纳裤子的面板,还有一个是货架可以容纳上衣和裤子。
即:
1)货架中的上衣可以拖放到上衣面板中,反之上衣面板中的物品可以拖放到货架中;
2)货架中的裤子可以拖放到裤子面板中,反之裤子面板中的物品可以拖放到货架中;
3)上衣不能拖放到裤子面板中,裤子不能拖放到上衣面板中;

 

效果图请看附近中view.jpg

 

第一步:创建物品VO,

ItemVO.java

package mytest.dragDrop.item
{
	public class ItemVO
	{
		private var _id:int;
		private var _name:String;
		private var _type:int;
		
		
		public function ItemVO($id:int, $name:String, $type:int)
		{
			this._id = $id;
			this._name = $name;
			this._type = $type;
		}
		
		public function get type():int
		{
			return _type;
		}

		public function set type(value:int):void
		{
			_type = value;
		}

		public function get name():String
		{
			return _name;
		}

		public function set name(value:String):void
		{
			_name = value;
		}

		public function get id():int
		{
			return _id;
		}
		
		public function set id(value:int):void
		{
			_id = value;
		}
	
		
	}
}

 

第二步:创建物品组件,因为物品要以组件Label的形式放在Panel中(可以根据自己的要求来包装物品VO)
ItemLabel.as

package mytest.dragDrop.item
{
	import org.aswing.JLabel;
	import org.aswing.dnd.DragManager;
	import org.aswing.dnd.SourceData;
	import org.aswing.event.DragAndDropEvent;

	public class ItemLabel extends JLabel
	{
		private var _item:ItemVO;
		
		public function ItemLabel($item:ItemVO)
		{
			super($item.name);
			this._item = $item;
			
			setDragEnabled(true);
			addEventListener(DragAndDropEvent.DRAG_RECOGNIZED, __onDragStart);			
		}
		
		
		private function __onDragStart(event:DragAndDropEvent):void{
			DragManager.startDrag(this, new SourceData("item", _item));
		}
		
		
		public function getItem():ItemVO{
			return this._item;
		}
	}
}

 

第三步:Model类
ItemModel.as

package mytest.dragDrop.item
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	import org.aswing.util.HashMap;

	public class ItemModel extends EventDispatcher
	{
		public static const EVENT_GET_ITEM_SUCC:String = "event_get_item_succ";
		
		private var _itemMap:HashMap;
		
		
		public function ItemModel()
		{
			_itemMap = new HashMap();
			
		}
		

		public function getItemByType($type:int):void{
			
			if($type == 1001){
				
				_itemMap.put(1001, [
					new ItemLabel(new ItemVO(8002, "上衣2", 1001)), 
					new ItemLabel(new ItemVO(8003, "上衣3", 1001))
				]);
				
			}
			
			else if($type == 1002){
				
				_itemMap.put(1002, [
					new ItemLabel(new ItemVO(9001, "裤子1", 1002)), 
				]);
				
			}
			else{
				_itemMap.put(-1, [
					new ItemLabel(new ItemVO(8001, "上衣1", 1001)), 
					new ItemLabel(new ItemVO(9002, "裤子2", 1002)),
					new ItemLabel(new ItemVO(9003, "裤子3", 1002))
				]);
				
			}
			
			dispatchEvent(new Event(EVENT_GET_ITEM_SUCC));

			
		}
		
		
		
	public function get itemMap():HashMap
	{
		return _itemMap;
	}
	
	public function set itemMap(value:HashMap):void
	{
		_itemMap = value;
	}
		
		
	}
}

 

第四步:Control类
ItemControl.as

package mytest.dragDrop.item
{

	public class ItemControl
	{
		private var _itemModel:ItemModel;
		
		public function ItemControl($itemModel:ItemModel)
		{
			this._itemModel = $itemModel;
		}
		
		
		public function getItemByType($type:int):void{
			_itemModel.getItemByType($type);
		}
	}
}

 第五步:物品面板,前面的ItemLabel是会放在ItemPanel中的
ItemPanel.as

package mytest.dragDrop.item
{
	import flash.events.Event;
	
	import org.aswing.ASColor;
	import org.aswing.JPanel;
	import org.aswing.border.TitledBorder;
	import org.aswing.event.DragAndDropEvent;

	public class ItemPanel extends JPanel
	{
	
		private var _itemModel:ItemModel;
		private var _itemControl:ItemControl;
		private var _type:int;
		private var _originalBG:ASColor;
		
		public function ItemPanel($itemModel:ItemModel, $itemControl:ItemControl, $title:String, $type:int = -1)
		{
			super();
			
			this._itemModel = $itemModel;
			this._itemControl = $itemControl;
			this._type = $type;
			
			var border:TitledBorder = new TitledBorder(null, $title);
			border.setColor(ASColor.BLACK);
			setBorder(border);
			
			 setDropTrigger(true);
   			 setDragAcceptableInitiatorAppraiser(__onDragAppraiser);
   
   			addEventListener(DragAndDropEvent.DRAG_ENTER, __onDragEnter);
   			addEventListener(DragAndDropEvent.DRAG_EXIT, __onDragExit);
   			addEventListener(DragAndDropEvent.DRAG_DROP, __onDragDrop);
   
   			setOpaque(true);
   
   			_originalBG = getBackground();
   
   			_itemModel.addEventListener(ItemModel.EVENT_GET_ITEM_SUCC, __onGetItemSucc);
   			_itemControl.getItemByType($type);			
		}
		
		private function __onGetItemSucc(event:Event):void{
			appendItemLabel(_itemModel.itemMap.get(this._type) as Array);
			
		}
		
		private function appendItemLabel(items:Array):void{
			for each(var item:ItemLabel in items){
				this.append(item);
			}
			
			_itemModel.removeEventListener(ItemModel.EVENT_GET_ITEM_SUCC, __onGetItemSucc);
		}
		
		private function __onDragAppraiser(initiator:ItemLabel):Boolean{
			if(_type == -1)
				return true;
			else
				return _type == initiator.getItem().type;
		}
		
		
		private function __onDragEnter(event:DragAndDropEvent):void{
			var initiator:ItemLabel = event.getDragInitiator() as ItemLabel;
			
			if(__onDragAppraiser(initiator)){
				setBackground(ASColor.GREEN);
			}
		}
		
		
		private function __onDragExit(event:DragAndDropEvent):void{
			setBackground(_originalBG);
			
			var initiator:ItemLabel = event.getDragInitiator() as ItemLabel;
			if(__onDragAppraiser(initiator)){
				
			}
			
		}
		
		
		private function __onDragDrop(event:DragAndDropEvent):void{
			setBackground(_originalBG);
			
			var initiator:ItemLabel = event.getDragInitiator() as ItemLabel;
			
			if(__onDragAppraiser(initiator)){
				append(initiator);
				
				
			}
		}
		
		
		public function getItems():Array{
			return this.children;
		}
		
		
	}
}

 

第六步:主界面

ItemDragDrop.as

package mytest.dragDrop.item
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	
	import org.aswing.AsWingManager;
	import org.aswing.GridLayout;
	import org.aswing.JButton;
	import org.aswing.JFrame;
	import org.aswing.JPanel;
	import org.aswing.geom.IntDimension;

	public class ItemDragDrop extends Sprite
	{
		private var _frm:JFrame;
		private var _jacketArea:ItemPanel;
		private var _pantsArea:ItemPanel;
		private var _whiteArea:ItemPanel;
		
		private var _itemModel:ItemModel;
		private var _itemControl:ItemControl;
		
		
		public function ItemDragDrop()
		{
			AsWingManager.initAsStandard(this);
		
			_itemModel = new ItemModel();
			_itemControl = new ItemControl(_itemModel);
			
			_frm = new JFrame(null, "物品分配");
			
			_jacketArea = new ItemPanel(_itemModel, _itemControl, "上衣", 1001);
			
			_pantsArea = new ItemPanel(_itemModel, _itemControl,  "裤子", 1002);
			
			_whiteArea =  new ItemPanel(_itemModel, _itemControl,  "货架", -1);
			
			var panel:JPanel = new JPanel(new GridLayout(2, 2, 4, 4));
			panel.appendAll(_jacketArea, _pantsArea, _whiteArea);
			
			var showBtn:JButton = new JButton("查看");
			showBtn.addEventListener(MouseEvent.CLICK, __onClick);
			panel.appendAll(showBtn);
			
			
			_frm.setContentPane(panel);
			_frm.setSize(new IntDimension(400, 400));
			_frm.show();
			
		}
		
		
		private function __onClick(e:MouseEvent):void{
				
			trace("===上衣===");
			for each (var jacket:ItemLabel in _jacketArea.getItems()){
				trace(jacket.getItem().name);
			}
			trace();
			
			trace("===裤子===");
			for each (var pants:ItemLabel in _pantsArea.getItems()){
				trace(pants.getItem().name);
			}
			trace();
			
			trace("===货架===");
			for each (var white:ItemLabel in _whiteArea.getItems()){
				trace(white.getItem().name);
			}
			trace();
			
		}
		
		
	}
}

  

  • 大小: 16.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics