代码之家  ›  专栏  ›  技术社区  ›  mmattax

如何在Flex中通过tab访问ButtonBar组件?

  •  1
  • mmattax  · 技术社区  · 16 年前

    我有一个按钮栏inflex和几个其他的输入控件,我已经为每个控件设置了tabIndex属性,一切都很顺利,直到我tab到ButtonBar为止。

    ButtonBar有3个按钮,但是通过tab键,只有第一个按钮获得焦点,再次tab,焦点回到顶部控件。。。

    对我来说这可能是个错误。。。

    1 回复  |  直到 16 年前
        1
  •  3
  •   Vineet Jain    7 年前

    编写组件是为了让用户在焦点位于条内时按左/右箭头键来遍历按钮——这是一个相当标准的GUI行为(在其他地方,如单选按钮组中也可以看到这一点)。如果你调查 SDK source for ButtonBar ,您可以看到它们在创建每个子按钮时显式禁用选项卡焦点的位置:

    override protected function createNavItem(
                                            label:String,
                                            icon:Class = null):IFlexDisplayObject
        {
            var newButton:Button = Button(navItemFactory.newInstance());
    
            // Set tabEnabled to false so individual buttons don't get focus.
            newButton.focusEnabled = false;
        ...
    

    如果您真的想更改此行为,可以创建一个子类来执行此操作,如下所示:

    package {
        import mx.controls.Button;
        import mx.controls.ButtonBar;
        import mx.core.IFlexDisplayObject;
    
        public class FocusableButtonBar extends ButtonBar {
            public function FocusableButtonBar()
            {
                super();
                this.focusEnabled = false;
            }
    
            override protected function createNavItem(
                        label:String, icon:Class=null):IFlexDisplayObject
            {
                var btn:Button = Button(super.createNavItem(label, icon));
                btn.focusEnabled = true;
                return btn;
            }
        }
    }