您的位置:首页 > 其它

MX2004 组件(一):焦点管理器(FocusManager)

2004-07-08 16:55 162 查看
?继承关系
?UIObject--->UIComponent--->FocusManager
?
?mx.manager.FocusManager
?一个例子先
?1)?拖一个Button和一个TextInput组件到舞台上。并取名okButton和input_txt
?2)?在时间轴第一桢写:
?okButton.tabIndex=1;
?input_txt.tabIndex=2;//设置两种组件的tabIndex属性,即按下tab键时的切换次序
?focusManager.setFocus(input_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.defaultPushButton=okButton;

?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);

?

screen.width/2)this.width=screen.width/2" vspace=2 border=0>
?其它的关于FocusManager类的方法和属性大家可以查下Components?Directory,学的方法就是从框架入手,刚开始的时候细节部分可以“不求甚解”在做东西的时候可以一边查一边用。
?这个系列是我一边翻一边加点自已的理解。不对的地方还望大家指正
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息