`

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
分享到:
评论

相关推荐

    AsWing 教程中文版

    在HelloScheme主类中,我们看到AsWingManager被用来初始化AsWing环境,然后创建了一个JFrame对象,这是AsWing中的窗口组件。接着创建了一个JLabel对象作为标签,并将其添加到窗口的内容面板上。设置窗口的大小,并...

    AsWing AEON 皮肤实例

    Aeon皮肤是AsWing中的一个设计风格,为用户提供了一种现代、简洁的视觉体验。 在AsWing中,皮肤(Skin)是界面外观的核心组成部分,它决定了应用程序的图标、颜色方案、布局以及其他UI元素的样式。更换皮肤可以让...

    AsWing UI源码

    【AsWing UI源码】是一个面向AS3(ActionScript 3)开发者的UI库,提供了丰富的用户界面组件和工具,旨在简化AS3中的图形用户界面(GUI)开发。这个库不仅包含了完整的源代码,还附带了GUI编辑器,方便开发者设计和...

    aswing组件知识点

    在AsWing中,通过实现`TableCellFactory`可以自定义单元格的渲染逻辑。例如,可以创建一个`GeneralTableCellFactory`来统一管理所有单元格的渲染器。这种方式提高了代码的复用性,同时也方便了单元格样式的统一管理...

    ASWING教程

    - **DragAndDrop功能**:介绍如何在AsWing中实现拖拽功能,以提高用户交互体验。 #### 11. 自定义观感 - **LookAndFeel**:指导如何定制界面的外观和感觉,使其更加符合项目的风格。 #### 12. 可视化工具Gui...

    Flash9下as3.0编程的aswing包

    通过使用ASwing,开发者可以像在Java环境中那样,利用组件拖放、布局管理来快速搭建界面,同时保持代码的整洁和模块化。 ASwing的源代码包含在提供的压缩包中,这为开发者提供了深入学习和定制的机会。你可以查看和...

    aswing2.0 src

    1. 熟悉ASwing的内部实现,理解组件的工作原理。 2. 自定义组件,满足特定业务需求。 3. 优化性能,例如减少内存占用,提升渲染速度。 4. 更好地集成第三方库或自有的代码。 5. 快速修复发现的问题,无需等待库的...

    asWing知识点

    - **JPanel**:在AsWing中,`JPanel`扮演着一个非常重要的角色,作为容器组件,它能够容纳其他GUI组件。在设置`JPanel`时,可以通过`setOpaque(boolean opaque)`方法来控制面板是否透明。 ### 2. JWindow与AsWing...

    Aswing皮肤制作

    在这个教程中,我们将深入探讨Aswing皮肤的工作原理,以及如何通过一系列步骤来设计和应用自定义皮肤。 首先,理解Aswing皮肤的基础是关键。Aswing的皮肤主要由两部分组成:外观(LookAndFeel)和组件样式...

    aswing API

    aswing API,与AsWing Book.pdf一起使用

    aswing 帮助文档

    AS3的aswing帮助文档! AS3的程序员必备物品。。详细的介绍哦

    aswing_a3_1.3.2_allinone

    在1.3.2这个版本中,我们可以预期开发者已经对ASwing_A3进行了大量的测试和改进,以提供更稳定、高效和易用的开发体验。 这个"allinone"的后缀可能意味着这个压缩包包含了ASwing_A3的全部组件、库、文档和示例,...

    Flash之pureMVC,aswing框架Libs文件

    标题中的“Flash之pureMVC,aswing框架Libs文件”指的是两个主要的ActionScript库:PureMVC和AsWing。这两个库都是为在Adobe Flash环境中开发富互联网应用程序(RIA)而设计的,尤其在Flex框架下使用广泛。下面将详细...

    AsWing Book.pdf

    AsWing Book.pdfAsWing Book.pdfAsWing Book.pdfAsWing Book.pdf

    aswing类库

    aswing类库的下载,可以让大家使用现成的布局来显示对象很简单很方便

    初学aswing学习实用例子

    ASwing,全称为ActionScript Swing,是Adobe Flex SDK中的一个组件库,用于在ActionScript 3.0项目中创建桌面应用程序。它模仿了Java Swing API的结构和功能,为Flex开发者提供了一种创建桌面GUI(图形用户界面)的...

    aswing更换皮肤实例2011

    通过分析和运行这个实例,你可以直观地看到皮肤更换的过程,并学习到如何在实际项目中实现这一功能。 此外,理解ASwing的事件处理和组件交互也是关键。皮肤更换不仅仅是改变外观,还可能涉及到组件状态的改变(如...

    aswing1.5+skinbuilder

    Swing 是 Java 标准库中用于构建图形用户界面(GUI)的一部分,而 ASwing 则是对其的一种扩展,提供了更丰富的组件、更美观的外观以及更好的可定制性,特别是对于皮肤的支持。 ASwing 1.5 特别强调了皮肤框架的使用...

    AsWing 组件框架

    在AsWing中,模型负责处理数据,视图负责显示数据,而控制器则负责处理用户交互事件,实现三者之间的协调工作。这种设计使得代码结构清晰,易于维护和扩展。 AsWing提供的组件包括但不限于按钮、文本框、列表、表格...

Global site tag (gtag.js) - Google Analytics