1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  3. xmlns:s="library://ns.adobe.com/flex/spark"
  4. xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()">
  5. <fx:Style>
  6.  
  7. Application{
  8. fontSize:12;
  9. fontFamily:myFont;
  10. }
  11. </fx:Style>
  12. <fx:Script>
  13.  
  14. <![CDATA[
  15. import com.twobowl.component.manualTopo.Nodes;
  16. import com.twobowl.component.manualTopo.line.ILine;
  17. import com.twobowl.component.manualTopo.main.TopoManager;
  18. import com.twobowl.component.manualTopo.node.INode;
  19. import com.twobowl.component.manualTopo.node.Node;
  20. import com.twobowl.component.manualTopo.renderer.lineRenderer.ILineRenderer;
  21. import com.twobowl.component.manualTopo.renderer.lineRenderer.SimpleLineRenderer;
  22. import com.twobowl.component.manualTopo.renderer.nodeRenderer.SimpleNodeRenderer;
  23.  
  24. import flash.utils.flash_proxy;
  25. import flash.utils.getTimer;
  26.  
  27. import mx.charts.renderers.LineRenderer;
  28. import mx.collections.ArrayCollection;
  29. import mx.collections.ArrayList;
  30. import mx.collections.XMLListCollection;
  31. import mx.containers.Panel;
  32. import mx.controls.Alert;
  33. import mx.core.Container;
  34. import mx.core.DragSource;
  35. import mx.core.IFlexDisplayObject;
  36. import mx.core.UIComponent;
  37. import mx.events.DragEvent;
  38. import mx.events.ItemClickEvent;
  39. import mx.managers.DragManager;
  40. import mx.managers.PopUpManager;
  41. import mx.rpc.events.FaultEvent;
  42. import mx.rpc.events.ResultEvent;
  43. import mx.rpc.remoting.RemoteObject;
  44. import mx.utils.ObjectUtil;
  45. [Bindable]
  46. private var manager:TopoManager;
  47. [Bindable]
  48. private var array:ArrayList;
  49. [Bindable]
  50. var data:ArrayCollection;
  51. [Bindable]
  52. var str:XML;
  53. var lable:Panel=new Panel;;
  54. var time:Timer;
  55. private var isDragging:Boolean;//推断是否在拖动中的标志
  56. //var isDoubleClick:Boolean = false;//推断是否是双击的标志
  57.  
  58. private function init():void{
  59. time=new Timer(100);
  60. time.addEventListener(TimerEvent.TIMER,mov);
  61. remote.getXml();
  62. manager=new TopoManager();
  63.  
  64. manager.drawSpace=drawSpace;
  65. manager.createFromXML(xmldata);
  66. //registerButton();
  67. manager.status=TopoManager.S_NORMAL;
  68. //registerButton();
  69. drawSpace.doubleClickEnabled=true;
  70. Alert.show(drawSpace.getChildren()[0].toString());
  71.  
  72. for each(var child:Object in drawSpace.getChildren()){
  73. if( child instanceof SimpleLineRenderer){
  74. (child as DisplayObject).addEventListener(MouseEvent.MOUSE_OVER,createLineWindow);
  75. (child as DisplayObject).addEventListener(MouseEvent.MOUSE_OUT,removeLineWindow);
  76. }else{
  77.  
  78. (child as DisplayObject).addEventListener(MouseEvent.MOUSE_DOWN, innerStartDragging,false,0,true);
  79. (child as DisplayObject).addEventListener(MouseEvent.MOUSE_UP, innerStopDragging,false,0,true);
  80. //(child as DisplayObject).addEventListener(MouseEvent.MOUSE_UP, click_stopDrag,false,0,true);
  81. (child as DisplayObject).addEventListener(MouseEvent.DOUBLE_CLICK, doubleInnerStartDragging);
  82. //(child as DisplayObject).addEventListener(MouseEvent.MOUSE_MOVE,createWindow);
  83. //(child as DisplayObject).addEventListener(MouseEvent.MOUSE_DOWN, mouseDown_startDrag);
  84. (child as DisplayObject).addEventListener(MouseEvent.CLICK, oneInnerStartDragging);
  85. (child as DisplayObject).removeEventListener(MouseEvent.MOUSE_DOWN,addLine);
  86. }
  87.  
  88. }
  89. }
  90. //private function onOverHand(e:Event):void{
  91.  
  92. //}
  93.  
  94. public var firstWindow:FirstWindow = new FirstWindow();
  95. public var linetWindow:LineRender = new LineRender();
  96. //使用组件对象打开弹出式窗体的最大优点是能够重用组件并保持所以的状态值.
  97. private function createWindow(e:MouseEvent):void
  98. {
  99. firstWindow.addEventListener("pop",getWindowData);
  100. PopUpManager.addPopUp(firstWindow, this, false);
  101. PopUpManager.centerPopUp(firstWindow);
  102. windowInnerStartDragging(e);
  103.  
  104. }
  105. private function getWindowData(e:Event):void
  106. {
  107. createNodeforward(e);
  108. //Alert.show(firstWindow.logs);
  109. //Alert.show(firstWindow.labelPosition.selectedItem.toString());
  110. //Alert.show("color:" + firstWindow.labelColor.selectedColor);
  111. }
  112.  
  113. private function createLineWindow(e:MouseEvent):void
  114. {
  115. //firstWindow.addEventListener("pop",getLineWindowData);
  116. //PopUpManager.addPopUp(linetWindow, this, false);
  117. //PopUpManager.centerPopUp(linetWindow);
  118. //windowLineStartDragging(e);
  119. //Alert.show(e.currentTarget.toString());
  120. //e.currentTarget.lineColor="0xCC336";
  121. lable.x=this.mouseX+5;
  122. lable.y=this.mouseY+5;
  123. //lable.width=100;
  124. //lable.height=40;
  125.  
  126. lable.title="wode";
  127.  
  128. PopUpManager.addPopUp(lable,this,false);
  129. //time.start();
  130.  
  131. }
  132.  
  133. //shubiao 窗体移动时间
  134.  
  135. //Timer监听函数
  136. public function mov(ti:TimerEvent):void{
  137. if(lable.x!=this.mouseX+5||lable.y!=this.mouseY+5)
  138. lable.move(this.mouseX+5,this.mouseY+5);
  139.  
  140. }
  141.  
  142. public function removeLineWindow(e:MouseEvent):void{
  143. //Alert.show("");
  144. PopUpManager.removePopUp(lable);
  145.  
  146. //time.stop();
  147. }
  148. private function getLineWindowData(e:Event):void
  149. {
  150. createNodeforward(e);
  151. //Alert.show(firstWindow.logs);
  152. //Alert.show(firstWindow.labelPosition.selectedItem.toString());
  153. //Alert.show("color:" + firstWindow.labelColor.selectedColor);
  154. }
  155.  
  156. //private var openner:Object;
  157. //private function createWindow(e:MouseEvent):void
  158. //{
  159. // openner = PopUpManager.createPopUp(this, FirstWindow, false);
  160. // PopUpManager.centerPopUp(openner as IFlexDisplayObject);
  161. // openner.setData(new Array("bobo", "huhu", "coco"));
  162.  
  163. // //openner.addEventListener("pop",getWindowData2);
  164. //
  165. //private function getWindowData2(e:Event):void
  166. //{
  167. //Alert.show(openner.logs);
  168. // Alert.show(openner.labelPosition.selectedItem.toString());
  169. // Alert.show("color:" + openner.labelColor.selectedColor);
  170. //}
  171. //private function onMouseDown(event:MouseEvent):void{
  172. //isDragging = false ;
  173.  
  174. //bla bla bla~~
  175. //for each(var child:Object in drawSpace.getChildren()){
  176. // childs.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
  177. //childs.addEventListener(MouseEvent.MOUSE_UP, innerStopDragging);
  178. //}
  179. //}
  180. //private function onMouseMove(event:MouseEvent):void {
  181. //isDragging = true ;
  182. //bla bla bla~~
  183. //innerStartDragging(event);
  184. //}
  185.  
  186. //private function onClick(event:MouseEvent):void {
  187. //if (isDragging == false) {
  188. //bla bla bla~
  189. /// doubleInnerStartDragging(event);
  190. //}
  191. //}
  192. private function getArraylistFromXMLList(data:XMLList):ArrayList
  193. {
  194. array=new ArrayList();
  195. for(var i:int=0;i<data.length();i++)
  196. {
  197. var obj:Object=new Object();
  198. for(var j:int=0;j<data[i].children().length();j++)
  199. {
  200. var dataColoum:String=data[i].children()[j].localName();
  201. obj[dataColoum]=data[i].children()[j].toString();
  202.  
  203. }
  204. array.addItem(obj);
  205. }
  206. return array;
  207. }
  208.  
  209. private function registerButton():void{
  210. //itemSource1.addEventListener(MouseEvent.MOUSE_DOWN,doItemSourceDrag);
  211. //itemSource2.addEventListener(MouseEvent.MOUSE_DOWN,doItemSourceDrag);
  212. ///itemSource3.addEventListener(MouseEvent.MOUSE_DOWN,doItemSourceDrag);
  213. //itemSource4.addEventListener(MouseEvent.MOUSE_DOWN,doItemSourceDrag);
  214.  
  215. //this.addEventListener(MouseEvent.MOUSE_UP,mouseUPHandle,false,0,true);
  216. }
  217. private function unregisterButton():void{
  218. //itemSource1.removeEventListener(MouseEvent.MOUSE_DOWN,doItemSourceDrag);
  219. //itemSource2.removeEventListener(MouseEvent.MOUSE_DOWN,doItemSourceDrag);
  220. //itemSource3.removeEventListener(MouseEvent.MOUSE_DOWN,doItemSourceDrag);
  221. //itemSource4.removeEventListener(MouseEvent.MOUSE_DOWN,doItemSourceDrag);
  222.  
  223. //this.addEventListener(MouseEvent.MOUSE_UP,mouseUPHandle,false,0,true);
  224. }
  225. public function doItemSourceDrag(event:MouseEvent):void{
  226.  
  227. //var dragItem:Image=ObjectUtil.copy(event.currentTarget) as Image;
  228. //var dragInitiator:Image=Image(event.currentTarget);
  229.  
  230. var ds:DragSource = new DragSource();
  231. //ds.addData(dragInitiator, "itemSource");
  232. //var dragProxy:Image=new Image();
  233. //dragProxy.source=dragInitiator.source;
  234. //dragProxy.width=dragInitiator.width;
  235. //dragProxy.height=dragInitiator.height;
  236. //DragManager.doDrag(dragInitiator, ds, event,dragProxy,0,0,1);
  237.  
  238. }
  239.  
  240. //var mySprite:Sprite = new Sprite();
  241.  
  242. //mySprite.addEventListener(MouseEvent.CLICK, onClick);
  243. //mySprite.addEventListener(MouseEvent.DOUBLE_CLICK, onDoubleClick);
  244. //private function onDoubleClick(event:MouseEvent):void {
  245. // isDoubleClick = true;
  246. //}
  247. ///private function onClick(event:MouseEvent):void {
  248. //isDoubleClick = false;
  249. //if (isDragging == false) {
  250. //var timer:Timer = new Timer(260, 1);
  251. //timer.start();//也就是说两次单击间隔在260毫秒之内的就被觉得是双击
  252. //timer.addEventListener(TimerEvent.TIMER, function(evt:Event):void {
  253. //Alert.show(isDoubleClick.toString());
  254. //if(isDoubleClick){
  255.  
  256. // doubleInnerStartDragging(event);//调用双击响应函数
  257. //}else{
  258. // oneInnerStartDragging(event);//调用单击响应函数
  259. //}
  260. //});
  261. //}//这边的clickOrDouble也能够写成匿名函数,把mouseEvent传进去
  262. //}
  263. //private function clickOrDouble(event:MouseEvent):void {
  264. //if(isDoubleClick){
  265. // doubleInnerStartDragging(event);//调用双击响应函数
  266. //}else{
  267. // oneInnerStartDragging(event);//调用单击响应函数
  268. //}
  269. //}
  270. // Called when the user moves the drag proxy onto the drop target.
  271.  
  272. private function dragEnterHandler(event:DragEvent):void {
  273.  
  274. if (event.dragSource.hasFormat('itemSource')) {
  275. var dropTarget:Canvas=Canvas(event.currentTarget);
  276. // Accept the drop.
  277. DragManager.acceptDragDrop(dropTarget);
  278. }
  279.  
  280. }
  281. //加入node
  282. private function dragDropHandler(event:DragEvent):void {
  283.  
  284. var data:Object = event.dragSource.dataForFormat('itemSource');
  285. var dragItem:SimpleNodeRenderer=new SimpleNodeRenderer();
  286. //var dragItem:Image=new Image();
  287. //dragItem.source=(data as Image).source;
  288. //Canvas(event.currentTarget).addChild(dragItem);
  289. var tData:XML=<node id="undifine" name="unknow" desc="unknow" x="200" y="600" imgUrl=""/>;
  290. tData.@id=getTimer();
  291. tData.@x=Canvas(event.currentTarget).mouseX;
  292. tData.@y=Canvas(event.currentTarget).mouseY;
  293. //tData.@imgUrl=(data as Image).source+"";;
  294. //dragItem.data=data;
  295. manager.createNode(tData,dragItem);
  296. //dragItem.addEventListener(MouseEvent.MOUSE_DOWN, innerStartDragging);
  297. //dragItem.addEventListener(MouseEvent.MOUSE_UP, innerStopDragging);
  298.  
  299. }
  300. // 按下鼠标按键时会调用此函数。
  301.  
  302. private function innerStartDragging(event:MouseEvent):void
  303. {
  304.  
  305. var parent:Container=(event.currentTarget as UIComponent).parent as Container;
  306. parent.removeChild(event.currentTarget as UIComponent);
  307. parent.addChild(event.currentTarget as UIComponent);
  308.  
  309. event.currentTarget.startDrag();
  310.  
  311. }
  312. private function doubleInnerStartDragging(e:MouseEvent):void
  313. {
  314. //var remotes:RemoteObject = new RemoteObject();
  315. //调用在J2EE端remoting-config.xml中配置的暴露出的类的名称 id
  316. //Alert.show(e.currentTarget.data.message);非常重要
  317.  
  318. remote.destination = "service";
  319. //调用J2EE端类中的方法
  320. remote.getXmls();
  321. //监听调用成功事件
  322. remote.addEventListener(ResultEvent.RESULT,result);
  323. //监听失败事件
  324. remote.addEventListener(FaultEvent.FAULT,fault);
  325. createWindow(e);
  326. //var str:XML=new XML(remote.getXmls());
  327. //trace(str.toString());
  328. //var s:String=remote.getXmls();
  329. //Alert.show(s);
  330. //var xmlList:XMLListCollection = new XMLListCollection(str.children());
  331. //data.source = xmlList.toArray();
  332. //getArraylistFromXMLList(xmllist);
  333.  
  334. //for(var i:int=0;i<data.length;i++){
  335. //// var o:Object = data.getItemAt(i);
  336. // trace(o["id"],o["source"],o["x"]);
  337. //}
  338. //event.currentTarget.startDrag();
  339.  
  340. }
  341. private function oneInnerStartDragging(e:MouseEvent):void
  342. {
  343. //var remotes:RemoteObject = new RemoteObject();
  344. //调用在J2EE端remoting-config.xml中配置的暴露出的类的名称 id
  345. //Alert.show(e.currentTarget.data.id);
  346. remote.destination = "service";
  347. //调用J2EE端类中的方法
  348. remote.getXmls();
  349. //监听调用成功事件
  350. remote.addEventListener(ResultEvent.RESULT,result);
  351. //监听失败事件
  352. remote.addEventListener(FaultEvent.FAULT,fault);
  353.  
  354. //var str:XML=new XML(remote.getXmls());
  355. //trace(str.toString());
  356. //var s:String=remote.getXmls();
  357. //Alert.show(s);
  358. //var xmlList:XMLListCollection = new XMLListCollection(str.children());
  359. //data.source = xmlList.toArray();
  360. //getArraylistFromXMLList(xmllist);
  361.  
  362. //for(var i:int=0;i<data.length;i++){
  363. //// var o:Object = data.getItemAt(i);
  364. // trace(o["id"],o["source"],o["x"]);
  365. //}
  366. //event.currentTarget.startDrag();
  367.  
  368. }
  369. private function result(evt:ResultEvent):void{
  370. //Alert.show(str);
  371. str=new XML(evt.result.toString());
  372. // var xmlList:XMLList=new XMLList();
  373. //var xmlListCollection:XMLListCollection=new XMLListCollection();
  374. // var provider:ArrayCollection;
  375. //xmlList=str.elements("node");
  376. //xmlListCollection.source=xmlList;
  377.  
  378. //provider=new ArrayCollection(xmlListCollection.toArray());
  379. //var str:XML=new XML(evt.result.toString());
  380. //var xmlList:XMLListCollection = new XMLListCollection(str.children());
  381. //data.source = xmlList.toArray();
  382. //data=new ArrayCollection(xmlList.toArray());
  383. //getArraylistFromXMLList(xmllist);
  384. //for(var i:int=0;i<data.length;i++){
  385. // var o:Object = data.getItemAt(i);
  386. //trace(o["id"],o["source"],o["x"]);
  387. //Alert.show(o["id"]);
  388. //}
  389. //Alert.show(xmlList.source);
  390. }
  391.  
  392. private function fault(evt:FaultEvent):void{
  393. Alert.show("调用失败。");
  394. }
  395.  
  396. private function windowInnerStartDragging(e:MouseEvent):void
  397. {
  398.  
  399. //var remotes:RemoteObject = new RemoteObject();
  400. //调用在J2EE端remoting-config.xml中配置的暴露出的类的名称 id
  401. remote.destination = "service";
  402. //调用J2EE端类中的方法
  403. remote.getXmls();
  404. //监听调用成功事件
  405. remote.addEventListener(ResultEvent.RESULT,windowresult);
  406. //监听失败事件
  407. remote.addEventListener(FaultEvent.FAULT,windowfault);
  408. //var str:XML=new XML(remote.getXmls());
  409. //trace(str.toString());
  410. //var s:String=remote.getXmls();
  411. //Alert.show(s);
  412. //var xmlList:XMLListCollection = new XMLListCollection(str.children());
  413. //data.source = xmlList.toArray();
  414. //getArraylistFromXMLList(xmllist);
  415.  
  416. //for(var i:int=0;i<data.length;i++){
  417. //// var o:Object = data.getItemAt(i);
  418. // trace(o["id"],o["source"],o["x"]);
  419. //}
  420. //event.currentTarget.startDrag();
  421.  
  422. }
  423.  
  424. private function windowresult(evt:ResultEvent):void{
  425. str=new XML(evt.result.toString());
  426. firstWindow.setData(str);
  427. }
  428.  
  429. private function windowfault(evt:FaultEvent):void{
  430. Alert.show("调用失败!");
  431. }
  432. private function windowLineStartDragging(e:MouseEvent):void
  433. {
  434.  
  435. remote.destination = "service";
  436. //调用J2EE端类中的方法
  437. remote.getXmls();
  438. //监听调用成功事件
  439. remote.addEventListener(ResultEvent.RESULT,lineresult);
  440. //监听失败事件
  441. remote.addEventListener(FaultEvent.FAULT,linefault);
  442.  
  443. }
  444.  
  445. private function lineresult(evt:ResultEvent):void{
  446. var strs :XML=new XML(evt.result.toString());
  447.  
  448. linetWindow.setData(strs);
  449. }
  450.  
  451. private function linefault(evt:FaultEvent):void{
  452. Alert.show("调用失败!
  453.  
  454. ");
  455. }
  456. // 松开鼠标按键时会调用此函数。
  457.  
  458. private function innerStopDragging(event:MouseEvent):void
  459. {
  460.  
  461. manager.updateLineRendererForNodeUI(event.currentTarget as UIComponent);
  462. event.currentTarget.stopDrag();
  463. }
  464. //暂时画线
  465. private function doDrawLine(event:MouseEvent):void
  466. {
  467. var x:int =Canvas(event.currentTarget).mouseX;
  468. var y:int =Canvas(event.currentTarget).mouseY;
  469. var lineToPoint:Point=new Point(x,y);
  470. curLine.freeDraw(lineFromPoint,lineToPoint);
  471. }
  472. private var lineFromPoint:Point;
  473. private var fromNode:INode;
  474. private var curLine:SimpleLineRenderer;
  475. //加入一条线
  476. private function addLine(event:MouseEvent):void{
  477. if(curLine!=null){
  478. curLine.parent.removeChild(curLine);
  479. curLine=null;
  480. }
  481.  
  482. fromNode=manager.getNodeByUI(event.currentTarget as UIComponent);
  483. if(fromNode){
  484. for each(var child:Object in drawSpace.getChildren()){
  485. if(child!=event.currentTarget){
  486. (child as DisplayObject).addEventListener(MouseEvent.MOUSE_UP,completeDrawLine);
  487. }
  488.  
  489. }
  490. curLine=new SimpleLineRenderer();
  491. drawSpace.addChildAt(curLine,0);
  492. var parent:Canvas=((event.currentTarget as UIComponent).parent) as Canvas;
  493. var x:int =parent.mouseX;
  494. var y:int =parent.mouseY;
  495. lineFromPoint=new Point(x,y);
  496. curLine.freeDraw(lineFromPoint,lineFromPoint);
  497. drawSpace.addEventListener(MouseEvent.MOUSE_MOVE,doDrawLine,false,0,true);
  498. drawSpace.addEventListener(MouseEvent.MOUSE_UP,stopDrawLineAndRemove,false,0,true);
  499. }
  500.  
  501. }
  502. //完毕画线,正式加入一条边
  503. private function completeDrawLine(event:MouseEvent):void{
  504. var toNode:INode=manager.getNodeByUI(event.currentTarget as UIComponent);
  505.  
  506. var tData:XML=<line id="" fromNode="" toNode=""/>;
  507. tData.@id=getTimer();
  508. tData.@fromNode=fromNode.data.@id;
  509. tData.@toNode=toNode.data.@id;
  510.  
  511. //dragItem.data=data;
  512. var newLine:ILine=manager.createLine(tData,curLine);
  513. newLine.viewRenderer.draw(newLine);
  514. removeDrawLineListner();
  515. }
  516. //停止画线
  517. private function stopDrawLineAndRemove(event:MouseEvent):void{
  518. curLine.parent.removeChild(curLine);
  519. removeDrawLineListner();
  520.  
  521. //curLine.clearDraw();
  522.  
  523. }
  524. //停止画线监听
  525. private function removeDrawLineListner():void{
  526.  
  527. drawSpace.removeEventListener(MouseEvent.MOUSE_MOVE,doDrawLine);
  528. drawSpace.removeEventListener(MouseEvent.MOUSE_UP,stopDrawLineAndRemove);
  529. for each(var child:Object in drawSpace.getChildren()){
  530. (child as DisplayObject).removeEventListener(MouseEvent.MOUSE_UP,completeDrawLine);
  531.  
  532. }
  533. curLine=null;
  534.  
  535. }
  536. private function forward(event:MouseEvent):void{
  537. var javaeyeUrl:URLRequest = new URLRequest("topic.html");
  538. navigateToURL(javaeyeUrl);
  539. }
  540. private function createNodeforward(event:Event):void{
  541. var javaeyeUrl:URLRequest = new URLRequest("createNode.html");
  542. navigateToURL(javaeyeUrl);
  543. }
  544. private function forwardJianKong(event:MouseEvent):void{
  545. var javaeyeUrl:URLRequest = new URLRequest("workPieChart.html");
  546. navigateToURL(javaeyeUrl);
  547. }
  548.  
  549. ]]>
  550. </fx:Script>
  551. <fx:Declarations>
  552.  
  553. <s:RemoteObject id="remote" destination="service" >
  554. </s:RemoteObject>
  555. <fx:XML id="xmldata" source="D://testNode.xml"/>
  556.  
  557. </fx:Declarations>
  558.  
  559. <s:BorderContainer width="100%" height="100%">
  560.  
  561. <s:VGroup x="0" y="0" width="953" height="598">
  562.  
  563. <s:Group width="100%" height="5%" >
  564. <mx:LinkButton x="23" y="10" label="首页" click="forward(event)"/>
  565. <mx:LinkButton x="138" y="10" label="监控图" paddingLeft="0" paddingRight="0" click="forwardJianKong(event)"/>
  566. <mx:LinkButton x="234" y="10" label="页面"/>
  567. </s:Group>
  568. <s:HGroup width="100%" height="90%">
  569. <s:Group width="100%" height="100%">
  570. </s:Group>
  571. <s:Group width="458" height="533">
  572. <mx:Canvas id="drawSpace" x="-467" y="-1" width="100%" height="100%"
  573. borderVisible="false" dragDrop="dragDropHandler(event);"
  574. dragEnter="dragEnterHandler(event);" horizontalScrollPolicy="off"
  575. verticalScrollPolicy="off">
  576.  
  577. </mx:Canvas>
  578. <mx:AdvancedDataGrid id="adg1" borderStyle="none" designViewDataType="flat" sortExpertMode="true" sortableColumns="true" width="100%" height="100%">
  579. <mx:dataProvider>
  580. <mx:HierarchicalData id="hd" source="{str.node}"/>
  581. </mx:dataProvider>
  582. <mx:groupedColumns>
  583.  
  584. <mx:AdvancedDataGridColumnGroup headerText="节点统计" >
  585. <mx:AdvancedDataGridColumn headerText="序号 " dataField="@id"/>
  586. <mx:AdvancedDataGridColumn headerText="节点名称" dataField="@source" />
  587.  
  588. <mx:AdvancedDataGridColumn headerText="提供数据" dataField="@x"/>
  589. <mx:AdvancedDataGridColumn headerText="使用数据" dataField="@y"/>
  590. </mx:AdvancedDataGridColumnGroup>
  591. </mx:groupedColumns>
  592. </mx:AdvancedDataGrid>
  593. </s:Group>
  594. </s:HGroup>
  595.  
  596. </s:VGroup>
  597. </s:BorderContainer>
  598.  
  599. </s:Application>

版权声明:本文博主原创文章,博客,未经同意不得转载。

flex4 一些项目使用的技术的更多相关文章

  1. atitit 商业项目常用模块技术知识点 v3 qc29

    atitit 商业项目常用模块技术知识点 v3 qc29 条码二维码barcodebarcode 条码二维码qrcodeqrcode 条码二维码dm码生成与识别 条码二维码pdf147码 条码二维码z ...

  2. p2p网贷项目开发全过程技术详解,应用框架是ci2.2

    p2p网贷项目开发全过程技术详解,应用框架是ci2.2 很标准的mvc开发代码,代码也很简单,方便二次开发 这篇文章会不断更新

  3. 1-1 课程导学 & 1-2 项目需求分析,技术分解.

    1-1 课程导学 1-2 项目需求分析,技术分解. 要有一定的dart基础,了解安卓和ios的一些普通的开发

  4. 【SSM之旅】Spring+SpringMVC+MyBatis+Bootstrap整合基础篇(一)项目简介及技术选型相关介绍

    试水 一直想去搭建个自己的个人博客,苦于自己的技术有限,然后也个人也比较懒散.想动而不能动,想动而懒得动,就这么一直拖到了现在.总觉得应该把这几年来的所学总结一番,这样才能有所成长. 不知在何时,那就 ...

  5. Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍

    作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载. 萌芽阶段 很久之前就开始打算整理一下自己的技术博客了,由于各种原因(借口 ...

  6. vue项目使用websocket技术

    一.为什么需要websocket? 前端和后端的交互模式最常见的就是前端发数据请求,从后端拿到数据后展示到页面中.如果前端不做操作,后端不能主动向前端推送数据,这也是http协议的缺陷. 因此,一种新 ...

  7. CNBlog客户端--项目介绍以及技术选型

    项目背景 由于现在开始在博客园写博客,再加上我是android程序员!所以呢,就自然而然的想到自己开发一个自己认为"美"的客户端!!其实还有个原因就是最近我比较闲!!纯属自己给自己 ...

  8. Android项目中JNI技术生成并调用.so动态库实现详解

    生成 jni方式有两种:一种是通过SWIG从C++代码生成过度的java代码:另一种是通过javah的方式从java代码自动生成过度的C++代码.两种方式下的步骤流程正好相反. 第一种方式:由于需要配 ...

  9. 项目兼容ie8技术要点

    好久没有写博客了,因为最近公司项目要调ie8兼容,一直在忙这事,终于竣工了,跟大家分享下这老掉牙的浏览器是如何搞定的...本人新手一枚,欢迎大家指教 项目是使用的jeecg框架,后台使用的java,前 ...

随机推荐

  1. ABAP 中 Table Control例子

    实现了Table Control的主要的一些功能,可以作为例子参考,实现的功能有是否可编辑切换,选择某一条记录点击按钮显示详细信息,新增记录,删除记录,选择所有记录,选择光标所有记录,取消选择所有,排 ...

  2. 《转》Linux网络编程入门

    原地址:http://www.cnblogs.com/duzouzhe/archive/2009/06/19/1506699.html (一)Linux网络编程--网络知识介绍 Linux网络编程-- ...

  3. Python性能分析指南 - 技术翻译 - 开源中国社区

    http://www.oschina.net/translate/python-performance-analysis

  4. hive字符串函数

    1. 字符串长度函数:length 语法: length(string A) 返回值: int 说明:返回字符串A的长度 举例: hive> select length('abcedfg') f ...

  5. 使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(一)——初识WiX

    原文:使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(一)--初识WiX Visual Studio 打包安装七宗罪 开发.NET的人,肯定会使用Visual ...

  6. hdu2606(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2606 题意:  用1*1,2*2,3*3,4*4的正方形填充4*n的矩形, 问有多少种不同填法. 分析 ...

  7. (转)Python获取当时时间

    我有的时候写程序要用到当前时间,我就想用python去取当前的时间,虽然不是很难,但是老是忘记,用一次丢一次, 为了能够更好的记住,我今天特意写下python 当前时间这篇文章,如果你觉的对你有用的话 ...

  8. AE+SceneControl源代码共享

    近来的,博友发私信或邮件交换,第一次使用前SceneControl代做一点project股票,做的很粗糙.我们希望对大家有帮助,欢迎留言交流哈萨克斯坦. 除了主开.保存.数据加载.询价,几个功能主要是 ...

  9. JAVA 根据经纬度算出附近的正方形的四个角的经纬度

    /** * * @param longitude 经度 * @param latitude 纬度 * @param distance 范围(米) * @return */ public static ...

  10. 重写equals()与hashCode()方法

    出自:http://blog.csdn.net/renfufei/article/details/16339351 Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类.Oj ...