• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>FLASH组件>文章内容
  • MX2004 组件(一):焦点管理器[FocusManager]
  • 来源:闪客帝国 作者:wowo 2006-06-22 【

  继承关系:
    UIObject--->UIComponent--->FocusManager

    包:mx.manager.FocusManager

    一个例子先

    1) 拖一个Button和一个TextInput组件到舞台上。并取名okButton和input_txt<
    2) 在时间轴第一帧写:

okButton.tabIndex=1;
input_txt.tabIndex=2;//设置两种组件的tabIndex属性,即按下tab键时的切换次序
focusManager.setFocusinput_txt);//当程序第一次运行的时候把焦点设在input_txt上
focusManager.defaultPushButton=okButton;//当用户按下Enter(windows)或Return(Macintash)时聚焦okButton
var lo=new Object();//定义一个Object对像来创建Listener
lo.click=function(evt){
  trace(evt.target+"was clicked");
}
okButton.addEventListener("click",lo);//当okButton按下时触发click事件

    FocusManager管理着所有2004中组件的焦点次序关系.它可以指定每一个组件在一个项目中的切换次序(就是当我们按tab键的时候焦点的位置)    所有的组件都继承了FocusManager类的方法和属性,但是你并不需要去用as直接的调用它。如果你没有给任何一个组件自定义焦点,那么它就会按照内定的方法来切换焦点.

    FocusManager还可以与SystemManager进行交互。它可以激活一个弹出窗口( pop_up)或者让它失去焦点。每一个对话框窗口都是一个FocusManager类的实例。因此在对话框窗口中的组件有它们自的tab次序,也就是说A弹出窗口中的tab次序与B弹出窗口的tab次序是独立的互不影响的。

    对于一种特殊情况:单选按钮(RadioButton),FocusManager是这样处理的:单选按钮有一个groupName属性,当FocusManager处理到RadioButton的时候,它会把焦点放在被选中的那个单选按钮上,(selected==true),再按tab键往下继续的时候它不会聚焦到有同一个groupName的另一个单选按钮,而是下一组具有不同groupName的单选按钮或是另外一个组件

    不管项目中的组件的tabIndex是如何定义的,只要有鼠标点击事件发生(当鼠标点击一个组件的)时候,FocusManager就会把焦点聚到被点击的那个组件上。

     FocusManager不会自动的事先给某一个组件聚焦,举例说:有A,B,C三个组件在一个项目里,当你打开这个项目的时候FocusManager不会自动的给A,或者B或者C聚焦,默认状态下是没有焦点的,除非你用FocusManager.setFocus(instanceName)去给一个组件预设焦点。

    使用焦点管理器[FocusManager]

    你可以用tabIndex属性来为项目中的组件自定义切换顺序。当用户点击tab键的时候,FocusManage会自动聚焦到比当前组件的tabIndex值大的组件上,如果tabIndex的属性值达到了最大值,那么就会返回0;举例说明:okButton是一个Button组件,input_txt是一个TextInput组件

    okButton.tabIndex=1;
    input_txt.tabIndex=2;

 

    那么当用户按下tab键的时候okButton就会先接受焦点,然后才是input_txt,如果希望用户按下Enter(window)或Return(Macintosh)键时聚焦到okButton,那么可以用defaultPushButton属性来实现。

focusManager.defaultPushButtonokButton
    FocusManager里有一个sendDefaultPushButtonEvent()方法需要特别说明一下。这个方法的作用是发送一个click的事件给被定义为focusManager.defaultPushButton的组件.演示一下先:

name_txt.tabIndex = 1;
password_txt.tabIndex = 2;
chb.tabIndex = 3;
submit_ib.tabIndex = 4;
focusManager.defaultPushButton = submit_ib;//这里定义了defaultPushButton属性
chbObj = new Object();
chbObj.click = function(o){
  if (chb.selected == true){
    name_txt.text = "Jody";
    password_txt.text = "foobar";
    focusManager.sendDefaultPushButtonEvent();
//当用户按下Enter(window)或Return(Macintash)的时候触发定义在submit_ib上的click事件
  }  else {
    name_txt.text = "";
    password_txt.text = "";
  }
}
chb.addEventListener("click", chbObj);
submitObj = new Object();
submitObj.click = function(o){ if (password_txt.text != "foobar"){ trace("error on submit"); } else { trace("Yeah! sendDefaultPushButtonEvent worked!"); } } submit_ib.addEventListener("click", submitObj);

    其它的关于FocusManager类的方法和属性大家可以查下Components Directory,学的方法就是从框架入手,刚开始的时候细节部分可以“不求甚解”在做东西的时候可以一边查一边用。

    这个系列是我一边翻一边加点自已的理解。不对的地方还望大家指正。

    也许这第一篇不是太引人注目,FocusManager的用法也不为大家关心,但了解一些总没有坏处:),以后会慢慢写更多更实用的:)

 

(完)




上一篇:Flash MX 2004 教程: 使用信息提示组件 Alert   下一篇:MX2004组件(二)Accordion[折叠菜单]
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
推荐内容

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)