用actionscript做的一张分布式网络拓扑图

最近一个项目中要做一张分布式的网络拓扑图,本来想在网上找个可以用的flash,结果没找到,有一个贴出源码的但好像缺东西什么的。一怒之下突击了几天actionscript,虽然耽搁了几天的工作,但还是做出来了,结果领导说和另一个相关产品的风格不符,所以没用(那个是用silverlight做的)。但也不能白做呀,自己用不上,网上也缺少相关例子源码,索性贴出来共享,希望可以帮到有需要的朋友。效果图倒是贴不贴呢,我只是写的代码,图什么的都不是自己的,也不知道是谁的,不知道人家同意不,公司肯定不同意啦,不管啦,再说吧。

这个就是所有的文件,自己写的急,注释神马的都木有,不过这个也不难懂,先把源码贴上吧,算了,还是先贴效果图吧,无图无真相,希望老板别看到呀。

先看Icon.as吧,这个就是各位在效果图中所看到的图片按钮的加载,以下是源码

//开始

package
{
 import flash.display.Bitmap;
 import flash.display.BitmapData;
 import flash.display.Loader;
 import flash.display.Shape;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.IOErrorEvent;
 import flash.events.MouseEvent;
 import flash.net.URLRequest;
 import flash.text.TextField;
 
 public class Icon extends Sprite
 {
  private var _url:String;
  private var _loader:Loader = new Loader();
  private var _text:Tip = new Tip();
  private var _image:Sprite = new Sprite();
  private var _showTip:Boolean = true;
  
  public function Icon(file:String, tip:Boolean = true)
  {
   _url = file;
   _showTip = tip;
   
   _text.visible = false;
   addChildAt(_image, 0);
   addChildAt(_text, 1);
   
   _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
   _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);
   _loader.load(new URLRequest(_url));
   
  }
  
  public function set showTip(tip:Boolean):void
  {
   _showTip = tip;
  }
  
  public function set text(text:String):void
  {
   _text.setLabel(text);
  }
  
  private function onComplete(event:Event):void
  {
   _image.addChild(Bitmap(_loader.content));
   if (_showTip)
   { 
    _image.addEventListener(MouseEvent.MOUSE_OVER, onMouseover);
    _image.addEventListener(MouseEvent.MOUSE_OUT, onMouseout);
   }
  }
  
  private function onError(event:Event):void
  {
   trace("Unable to load image: " + _url);
  }
  
  protected function onMouseover(event:MouseEvent):void
  {
   _text.x = event.localX;
   _text.y = _image.y + _image.height + 5;
   _text.visible = true;
  }
  
  protected function onMouseout(event:MouseEvent):void
  {
   _text.visible = false;
  }
  
 }
}

//结束

再看BigIcon.as(这个其实就是那个设备图标,还记得自己当初给文件起名的时候想了好久,最后还是搞了一个比较挫的名字,哈哈),源码

//开始

package
{
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.MouseEvent;

 public class BigIcon extends Sprite
 {
  static public var IMAGE_WIDTH:Number = 44;
  static public var IMAGE_HEIGHT:Number = 28;
  
  private var _on:Icon;
  private var _off:Icon;
  private var _text:Tip = new Tip();
  
  static public var ON:String = "on";
  static public var OFF:String = "off";
  private var _status:String;
  
  public function BigIcon(name:String)
  {
   _on = new Icon("image/" + name + "_on.png", false);
   _off = new Icon("image/" + name + "_off.png", false); 
   
   addChildAt(_on, 0);
   addChildAt(_off, 1);
   
   _text.visible = false;
   addChildAt(_text, 2);
   
   off();
   addEventListener(MouseEvent.MOUSE_OVER, onMouseover);
   addEventListener(MouseEvent.MOUSE_OUT, onMouseout);
  }
  
  public function set text(text:String):void
  {
   _text.setLabel(text);
  }
  
  public function hide():void
  {
   _on.visible = false;
   _off.visible = false;
  }
  
  public function on():void
  {
   hide();
   _status = MyButton.ON;
   _on.visible = true;
  }
  
  public function off():void
  {
   hide();
   _status = MyButton.OFF;
   _off.visible = true;
  }
  
  public function get status():String
  {
   return _status;
  }
  
  public function onMouseover(e:MouseEvent):void
  {
   _text.x = e.localX + 5;
   _text.y = e.localY + 5;
   _text.visible = true;
  }
  
  public function onMouseout(e:MouseEvent):void
  {
   _text.visible = false;
  }
 }
}

//结束

突然看到上面的构造函数中的name了,其实图片名字也是有规则的(图片不能共享啊,不是自己的)。先看看图片名字吧

再看设备下边的四个精致的小按钮的,叫MyButton.as(这些文件的名字以最开始的项目图片中文件的名字为准,我有可能敲错),源码

//开始

package
{
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.ui.Mouse;
 
 import org.osmf.net.StreamingURLResource;

 public class MyButton extends Sprite
 {
  static public const IMAGE_WIDTH:Number = 12;
  static public const IMAGE_HEIGHT:Number = 12;
  
  static public const ON:String = "开启";
  static public const OFF:String = "关闭";
  static public const SUCCESS:String = "成功";
  static public const FAILED:String = "失败";
  
  private var _id:String;
  private var _name:String;
  
  private var _icon_on:Icon;
  private var _icon_off:Icon;
  private var _icon_success:Icon;
  private var _icon_failed:Icon;
  private var _status:String;
  
  public function MyButton(name:String, text:String)
  {
   _name = name;
   _icon_on = new Icon("image/" + name + "_on.png");
   _icon_on.text = MyButton.OFF + text;
   _icon_off = new Icon("image/" + name + "_off.png");
   _icon_off.text = MyButton.ON + text;
   _icon_success = new Icon("image/" + name + "_success.png");
   _icon_success.text = text + MyButton.SUCCESS;
   _icon_failed = new Icon("image/"+ name + "_failed.png");
   _icon_failed.text = text + MyButton.FAILED;
   
   alpha = .6;
   buttonMode = true;

   addEventListener(MouseEvent.MOUSE_OVER, onMouseover);
   addEventListener(MouseEvent.MOUSE_OUT, onMouseout);
   
   addChildAt(_icon_success, 0);
   addChildAt(_icon_failed, 1);
   addChildAt(_icon_on, 2);
   addChildAt(_icon_off, 3);
   
   off();
  }
  
  public function hide():void
  {
   _icon_on.visible = false;
   _icon_off.visible = false;
   _icon_success.visible = false;
   _icon_failed.visible = false;
  }
  
  public function on():void
  {
   hide();
   _status = MyButton.ON;
   _icon_on.visible = true;
  }
  
  public function off():void
  {
   hide();
   _status = MyButton.OFF;
   _icon_off.visible = true;
  }
  
  public function success():void
  {
   hide();
   _status = MyButton.SUCCESS;
   _icon_success.visible = true;
  }
  
  public function failed():void
  {
   hide();
   _status = MyButton.FAILED;
   _icon_failed.visible = true;
  }
  
  public function set status(name:String):void
  {
   switch(name)
   {
    case MyButton.ON:
     on();
     break;
    case MyButton.OFF:
     off();
     break;
    case MyButton.SUCCESS:
     success();
     break;
    case MyButton.FAILED:
     failed();
     break;
   }
  }
  
  public function get status():String
  {
   return _status;
  }
  
  public function onMouseover(e:MouseEvent):void
  {
   alpha = 1;
  }
  
  public function onMouseout(e:MouseEvent):void
  {
   alpha = .6;
  }
  
  public function toggleOnOff():Boolean
  {
   if (_status == MyButton.ON)
   {
    off();
    return true;
   }
   else if (_status == MyButton.OFF)
   {
    on();
    return true;
   }
   return false;
  }
  
  public function set id(id:String):void
  {
   _id = id;
  }
  
  public function get id():String
  {
   return _id;
  }
  
  public function getName():String
  {
   return _name;
  }
  
 }
}

//结束

贴得累死俺了,今天看了一张图片,说是一个php还是java程序员上什么相亲节目,女嘉宾等全灭啦,虽然平时不看什么蛋疼的相亲神马的,但还是让人不舒服啊,唉,why?看来俺是找不到老婆啦,不管了,再往下看,下来该什么了,哦还是个Alert,自己没有用flex,所以没有提示框,做了个相当难看的提示,其实还好了,改改还是可以见人的

Message.as

//开始

package
{
 import flash.display.Sprite;
 import flash.events.TimerEvent;
 import flash.text.TextField;
 import flash.text.TextFieldAutoSize;
 import flash.text.TextFormat;
 import flash.utils.Timer;
 
 public class Message extends Sprite
 {
  private var _content:TextField = new TextField();
  private var _timer:Timer = new Timer(3000, 1);
  private var _parent:Sprite;
  public function Message(text:String, parent:Sprite)
  {
   _parent = parent;
   var format:TextFormat = new TextFormat();
   format.color = 0xFF0000;
   format.size = 12;
   format.underline = false;
   _content.autoSize = TextFieldAutoSize.CENTER;
   _content.background = true;
   _content.backgroundColor = 0xFFFFFF;
   _content.height = 50;
   _content.width = 300;
   _content.border = true;
   _content.borderColor = 0xCCCCCC;
   _content.defaultTextFormat = format;
   addChild(_content);
   _content.text = text;
   _timer.start();
   _timer.addEventListener(TimerEvent.TIMER_COMPLETE, remove);
  }
  
  public function remove(e:TimerEvent):void
  {
   _parent.removeChild(this);
  }
 }
}

//结束

Tip.as

//开始

package {
 import flash.display.Sprite;
 import flash.text.TextField;
 import flash.text.TextFieldAutoSize;
 import flash.text.TextFormat;
 
 
 public class Tip extends Sprite {
  private var _label:TextField;
  
  public function Tip(text:String="") {
   _label = new TextField();
   _label.autoSize = TextFieldAutoSize.LEFT;
   _label.background = true;
   _label.border = true;
   _label.borderColor=0x999999;
   _label.condenseWhite = true;
   _label.width= 200;
   _label.height = 200;
   
   var format:TextFormat = new TextFormat();
   format.color = 0x333333;
   format.size = Netshow.FONT_SIZE;
   format.underline = false;
   format.leftMargin = "5";
   format.rightMargin = "5";
   
   _label.defaultTextFormat = format;
   addChild(_label);
   
   setLabel(text);
  }
  
  public function setLabel(text:String):void {
   _label.text = text;
  }
 }
}

//结束

下来看一个比较重要的文件,就是把那个设备和几个小按钮组合到一块的文件Device.as

//开始

package
{
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 import flash.text.TextField;
 import flash.text.TextFieldAutoSize;
 import flash.text.TextFormat;
 
 public class Device extends Sprite
 { 
  static public const BTN_CLOCK:String = "clock";
  static public const BTN_UPDATE:String = "update";
  static public const BTN_POLICY:String = "policy";
  static public const BTN_ADJUST:String = "adjust";
  
  private var _online:Boolean = false;
  
  private var _ip:String;
  
  private var _mac:String;
  
  private var _parentMac:String;
  
  private var _depth:Number;
  
  private var _clock:MyButton = new MyButton(Device.BTN_CLOCK, "clock");
  
  private var _update:MyButton = new MyButton(Device.BTN_UPDATE, "update");
  
  private var _policy:MyButton = new MyButton(Device.BTN_POLICY, "down");
  
  private var _adjust:MyButton = new MyButton(Device.BTN_ADJUST, "config");
  
  private var _img:BigIcon;
  
  private var _sprite:Sprite;
  
  public function Device(mac:String, ip:String, parentMac:String, plies:Number)
  {
   _mac = mac;
   _ip = ip;
   _parentMac = parentMac;
   _depth = plies;
   
   _img = _depth == 0 ? new BigIcon("top") : new BigIcon("device");
 
   _update.id = _mac;
   _clock.id = _mac;
   _policy.id = _mac;
   _adjust.id = _mac;
   _update.x = 0;
   _adjust.x = MyButton.IMAGE_WIDTH + 5;
   _policy.x = 2*(MyButton.IMAGE_WIDTH + 5);
   _clock.x = 3*(MyButton.IMAGE_WIDTH + 5);
   _update.y = _adjust.y = _policy.y = _clock.y = BigIcon.IMAGE_HEIGHT + 2;
   _img.x = 10;
   _img.y = 0;
   
   var label:TextField = new TextField();
   label.x = 0;
   label.y = BigIcon.IMAGE_HEIGHT + MyButton.IMAGE_HEIGHT + 4;
   label.width = 60;
   label.height = 16;
   label.alpha = .8;
   label.autoSize = TextFieldAutoSize.CENTER;
   var format:TextFormat = new TextFormat();
   format.color = 0x333333;
   format.size = Netshow.FONT_SIZE;
   label.defaultTextFormat = format;
   if (ip.length > 15)
   {
    ip = ip.substr(0, 13) + "...";
   }
   label.text = ip;
   
   addChild(label);
   addChild(_clock);
   addChild(_update);
   addChild(_policy);
   addChild(_adjust);
   addChild(_img);
   
   _online = false;
   
   updateText();
  }
  
  public function updateText():void
  {
   var text:String;
   text = "your text";
   _img.text = text;
  }
  
  public function getBtnByName(name:String):MyButton
  {
   switch(name)
   {
    case Device.BTN_ADJUST:
     return _adjust;
    case Device.BTN_CLOCK:
     return _clock;
    case Device.BTN_POLICY:
     return _policy;
    case Device.BTN_UPDATE:
     return _update;
   }
   return null;
  }
  
  public function get online():Boolean
  {
   return _online;
  }
  
  public function set online(value:Boolean):void
  {
   _img.on();
   _online = value;
  }
  
  public function get depth():Number
  {
   return _depth;
  }
  
  public function get mac():String
  {
   return _mac;
  }
  
  public function get parentMac():String
  {
   return _parentMac;
  }
  
  public function visiableWidth():Number
  {
   return 4*(MyButton.IMAGE_WIDTH+5);
  }
  
  public function visiableHeight():Number
  {
   return MyButton.IMAGE_HEIGHT + BigIcon.IMAGE_HEIGHT + 20;
  }
 
 }
}

//结束

现在在网上找点可以用的东西可真不爽,不是要分就是注册或者其他什么讨厌的方法,再来看怎么把所有的组合到一块形成分布图显示,NetShow.as

//开始

package
{
 import flash.display.*;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.ui.Mouse;
 
 public class Netshow extends Sprite
 {
  static public const DEVICE_WIDTH:Number = 50;
  static public const DEVICE_HEIGHT:Number = 50;
  
  static public const DEVICE_PADDING_X:Number = 50;
  static public const DEVICE_PADDING_Y:Number = 50;
  
  static public const ONLINE_LINE_COLOR:Number = 0x00ff00;
  static public const OFFLINE_LINE_COLOR:Number = 0xCCCCCC;
  static public const LINE_WIDTH:Number = 2;
  static public const FONT_SIZE:Number = 10;
  
  private var _devices:Array;
  
  private var _relation:Array;
  
  public function Netshow()
  {
   _devices = new Array();
  }
  
  public function addDevice(device:Device):void
  {
   _devices.push(device);
   this.addChild(device);
  }
  
  public function getDevicesByDeepth(deepth:Number):Array
  {
   var devices:Array = new Array();
   
   if (deepth >= 0 )
   {
    for (var i:int=0; i<_devices.length; i++)
    {
     if ( _devices[i].depth == deepth )
     {
      devices.push(_devices[i]);
     }
    }
   }
   
   return devices;
  }
  
  private function getDevicesByParentMac(mac:String):Array
  {
   var devices:Array = new Array();
   
   for (var i:int=0; i<_devices.length; i++)
   {
    if ( _devices[i].parentMac == mac )
    {
     devices.push(_devices[i]);
    }
   }
   
   return devices;
  }
  
  private function addRelation(depth:Number, devices:Array):void
  {
   var btn:MyButton;
   for (var i:Number=0; i<devices.length; i++)
   {
    btn = devices[i].getBtnByName(Device.BTN_ADJUST);
    btn.addEventListener(MouseEvent.CLICK, btnClick);
    btn = devices[i].getBtnByName(Device.BTN_CLOCK);
    btn.addEventListener(MouseEvent.CLICK, btnClick);
    btn = devices[i].getBtnByName(Device.BTN_UPDATE);
    btn.addEventListener(MouseEvent.CLICK, btnClick);
    btn = devices[i].getBtnByName(Device.BTN_POLICY);
    btn.addEventListener(MouseEvent.CLICK, btnClick);
    _relation[depth].push(devices[i]);
   }
  }
  
  private function setRelation():void
  {
   var deep:Number = maxDeepth();
   _relation = new Array();
   
   for (var i:Number=0; i<=deep; i++)
   {
    _relation[i] = new Array();
    var parent_deepth_devices:Array = getDevicesByDeepth(i-1);
    
    if (parent_deepth_devices.length == 0)
    {
     addRelation(i, getDevicesByDeepth(i));
    }
    else
    {
     for (var m:Number=0; m<parent_deepth_devices.length; m++)
     { 
      addRelation(i, getDevicesByParentMac(parent_deepth_devices[m].mac));
     }
    }
   }
  }
  
  private function maxDeepth():Number
  {
   var deep:Number = 0;
   for (var i:int=0; i<_devices.length; i++)
   {
    if ( _devices[i].depth > deep )
    {
     deep = _devices[i].depth;
    }
   }
   
   return deep;
  }
  
  public function setRelationPos():void
  {
   var pos_x:Number = 0;
   var pos_y:Number = 0;
   for (var deepth:Number=0; deepth<_relation.length; deepth++)
   {
    pos_x = 0;
    if ( _relation[deepth].length )
    {
     for (var i:Number=0; i<_relation[deepth].length; i++)
     {
      _relation[deepth][i].x = pos_x;
      _relation[deepth][i].y = pos_y;
      pos_x = pos_x + Netshow.DEVICE_WIDTH + Netshow.DEVICE_PADDING_X;
     }
    }
    
    pos_y = pos_y + Netshow.DEVICE_HEIGHT  + Netshow.DEVICE_PADDING_Y;
   }
  }
  
  public function getDeviceByMac(mac:String):Device
  {
   for (var i:int=0; i<_devices.length; i++)
   {
    if ( _devices[i].mac == mac )
    {
     return _devices[i];
    }
   }
   
   return null;
  }
 
  public function isBrother(dev1:Device, dev2:Device):Boolean
  {
   if (!dev1 || !dev2)
   {
    return false;
   }
  
   return dev1.parentMac == dev2.parentMac;
  }
  
  public function connectRelation():void
  {
   var x_from:Number = 0, x_to:Number = 0;
   var y_from:Number = 0, y_to:Number = 0;
   var y_protect:Number = 0;
   var color:Number = 0;
   for (var depth:Number=1; depth<_relation.length; depth++)
   {
    y_protect = 0;
    for (var i:Number=0; i<_relation[depth].length; i++)
    {
     var parentDevice:Device = getDeviceByMac(_relation[depth][i].parentMac);
     if (parentDevice == null)
      continue;
     if (!isBrother(_relation[depth][i], _relation[depth][i-1]))
     {
      if (y_protect < DEVICE_PADDING_Y - 10)
      {
       y_protect += 5;
      }
     }
     
     color = parentDevice.online && _relation[depth][i].online ? Netshow.ONLINE_LINE_COLOR : Netshow.OFFLINE_LINE_COLOR;
     x_from = parentDevice.x + Math.ceil(parentDevice.visiableWidth()/2);
     y_from = parentDevice.y + parentDevice.visiableHeight();
     x_to = _relation[depth][i].x + Math.ceil(_relation[depth][i].visiableWidth()/2);
     y_to = _relation[depth][i].y;
     graphics.lineStyle(Netshow.LINE_WIDTH, color, .5);
     graphics.moveTo( x_from, y_from );
     graphics.lineTo( x_from, y_to - y_protect);
     graphics.lineTo(x_to, y_to - y_protect);
     graphics.lineTo(x_to, y_to);
    }
   }
  }
  
  public function showDevices():void
  {
   setRelation();
   
   setRelationPos();
   
   connectRelation();
  }
  
  public function count():Number
  {
   return _devices.length;
  }
  
  public function setDevicesBtnStatusByParentMac(mac:String, btn_name:String, status:String):void
  {
   var devices:Array = getDevicesByParentMac(mac);
   
   for (var i:Number=0; i<devices.length; i++)
   {
    devices[i].getBtnByName(btn_name).status = status;
    devices[i].updateText();
    setDevicesBtnStatusByParentMac(devices[i].mac, btn_name, status)
   }
  }
  
  public function alert(text:String):void
  {
   var _msg:Message = new Message(text, this);
   _msg.x = Math.ceil(this.width/2 - _msg.width);
   _msg.y = 30;
   addChild(_msg);
  }
  
  public function btnClick(e:MouseEvent):void
  {
   var btn:MyButton = e.currentTarget as MyButton;
   var parentDevice:Device = getDeviceByMac(getDeviceByMac(btn.id).parentMac);
   if (parentDevice==null || parentDevice.getBtnByName(btn.getName()).status != MyButton.OFF)
   {
    if (btn.toggleOnOff())
    {
     getDeviceByMac(btn.id).updateText();
     setDevicesBtnStatusByParentMac(btn.id, btn.getName(), btn.status);
    } 
   }
   else
   {
    alert("you know"); 
   }
  }
 }
}

//结束

其实actionscript和javascript交互还是比较好的,actionscript负责显示,javascript负责逻辑,这样效率应该能高些(这样说或许是因为自己的javascript能熟练些吧),到这基本上就完了,剩下那几个文件基本上是废材,废就废吧,一块整出来,反正咱也不是什么有头有脸的人物,菜鸟表示无压力呀。

TextInput.as

package
{
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 import flash.text.TextField;
 import flash.text.TextFieldType;
 import flash.text.TextFieldAutoSize;
 import flash.text.TextFormat;
 
 public class TextInput extends Sprite
 {
  private var _valueField:TextField = new TextField();
  private var _labelField:TextField = new TextField();
  
  public function TextInput(w:Number, h:Number, label:String, value:String = "")
  {
   var format:TextFormat = new TextFormat();
   format.color = 0x333333;
   format.size = Netshow.FONT_SIZE;
   format.underline = false;
   format.leftMargin = "5";
   format.rightMargin = "5";
   _labelField.defaultTextFormat = format;
   _labelField.text = label;
   
   _valueField.type = TextFieldType.INPUT;
   _valueField.width = w;
   _valueField.height = h;
   _valueField.border = true;
   _valueField.borderColor = 0xCCCCCC;
   _valueField.alpha = .8;
   _valueField.text = value;
   _valueField.x = _labelField.textWidth + 10;
   addChild(_labelField);
   addChild(_valueField)
   
   
   _valueField.addEventListener(MouseEvent.MOUSE_OVER, mouseover);
   _valueField.addEventListener(MouseEvent.MOUSE_OUT, mouseout);
  }
  
  public function get value():String
  {
   return _valueField.text;
  }
  
  private function mouseover(e:MouseEvent):void
  {
   alpha = 1;
   _valueField.borderColor = 0x00CCCC;
  }
  
  private function mouseout(e:MouseEvent):void
  {
   alpha = .8;
   _valueField.borderColor = 0xCCCCCC;
  }
 }
}

别用flex提供的控件说话啊,这样说会让人伤心的,我是写完了才发现flex提供的控件做起来更快。

//update_setting.as

package
{
 import flash.display.Sprite;
 import flash.text.TextField;
 import flash.text.TextFieldAutoSize;
 import flash.text.TextFormat;
 
 public class Setting_update extends Sprite
 {
  public static const INPUT_WIDTH:Number = 120;
  public static const INPUT_HEIGHT:Number = 20;
  
  private var _title:TextField = new TextField();
  
  public function Setting_update()
  {
   var outline:Sprite = new Sprite;
   outline.graphics.lineStyle(1, 0xCCCCCC, .9);
   outline.graphics.drawRect(0, 0, 160, 110);
   var format:TextFormat = new TextFormat();
   format.color = 0x333333;
   format.size = Netshow.FONT_SIZE;
   format.underline = false;
   format.leftMargin = "5";
   format.rightMargin = "5";
   _title.width = 160;
   _title.background = true;
   _title.backgroundColor = 0xFFFFFF;
   _title.defaultTextFormat = format;
   _title.htmlText = "<b>update</b>";
   _title.autoSize = TextFieldAutoSize.CENTER;
   
   outline.x = 0;
   outline.y = Math.ceil(_title.height/2);
   addChild(outline);
   addChild(_title);
  }
 }
}

还有个setting_policy.as

package
{
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 import flash.net.URLRequest;
 import flash.net.URLVariables;
 import flash.net.sendToURL;
 import flash.text.TextField;
 import flash.text.TextFieldAutoSize;
 import flash.text.TextFormat;
 
 import mx.events.Request;

 public class Setting_policy extends Sprite
 {
  public static const INPUT_WIDTH:Number = 120;
  public static const INPUT_HEIGHT:Number = 20;
  
  private var _saveUrl:String = "";
  private var _title:TextField = new TextField();
  private var _device:TextInput = new TextInput(INPUT_WIDTH, INPUT_HEIGHT, "field1");
  private var _name:TextInput = new TextInput(INPUT_WIDTH, INPUT_HEIGHT, "field2");
  private var _type:TextInput = new TextInput(INPUT_WIDTH, INPUT_HEIGHT, "field3");
  
  public function Setting_policy()
  { 
   var outline:Sprite = new Sprite;
   outline.graphics.lineStyle(1, 0xCCCCCC, .9);
   outline.graphics.drawRect(0, 0, 160, 126);
   var format:TextFormat = new TextFormat();
   format.color = 0x333333;
   format.size = Netshow.FONT_SIZE;
   format.underline = false;
   format.leftMargin = "5";
   format.rightMargin = "5";
   _title.width = 160;
   _title.background = true;
   _title.backgroundColor = 0xFFFFFF;
   _title.defaultTextFormat = format;
   _title.htmlText = "<b>策略下发</b>";
   _title.autoSize = TextFieldAutoSize.CENTER;
   _device.x = _name.x = _type.x = 0;
   _title.y = 0;
   _device.y = _title.height;
   _name.y = _title.height + INPUT_HEIGHT + 10;
   _type.y = _title.height + 2 * INPUT_HEIGHT + 20;
   outline.x = 0;
   outline.y = Math.ceil(_title.height/2);
   addChild(outline);
   addChild(_title);
   outline.addChild(_device);
   outline.addChild(_name);
   outline.addChild(_type);
   
   var submit:Icon = new Icon("image/submit.jpg", false);
   submit.buttonMode = true;
   submit.addEventListener(MouseEvent.CLICK, save);
   submit.addEventListener(MouseEvent.MOUSE_OVER, onMouseover);
   submit.addEventListener(MouseEvent.MOUSE_OUT, onMouseout);
   submit.alpha = .6;
   submit.x = 110;
   submit.y = 105;
   outline.addChild(submit);
  }
  
  public function save(e:MouseEvent):void
  {
   var variables:URLVariables = new URLVariables();
   variables.name = _name.value;
   variables.type = _type.value;
   variables.device = _device.value;
   var request:URLRequest = new URLRequest(_saveUrl);
   request.data = variables;
   trace("sendToURL: " + request.url + "?" + request.data);
   try {
    sendToURL(request);
   }
   catch (e:Error) {
    // handle error here
   }
  }
  
  public function onMouseover(e:MouseEvent):void
  {
   (e.target as Sprite).alpha = 1;
  }
  
  public function onMouseout(e:MouseEvent):void
  {
   (e.target as Sprite).alpha = .6;
  }
 }
}

这下应该完了,那个phpdata的是个空文件,本来想和服务端交互的,没想到夭折了。

终于完了。有什么遗漏的地方发现了会添上去的。希望可以帮到像我刚开始一样需要一张简单的拓扑图的人。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值