Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex focus在Flex中是如何工作的?_Apache Flex_Focus - Fatal编程技术网

Apache flex focus在Flex中是如何工作的?

Apache flex focus在Flex中是如何工作的?,apache-flex,focus,Apache Flex,Focus,我试图弄清楚焦点机制在Flex中是如何工作的。下面是我的意思的例子: 假设我们有一个简单的web应用程序,它包含扩展Canvas并实现mx.managers.ifocusmanager组件的自定义组件。此组件覆盖focusInHandler和focusOutHandler方法,并显示有关如何调用它们的一些反馈(较薄或较厚的边框)。此自定义组件还包含一些文本 组件的来源是: <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width=

我试图弄清楚焦点机制在Flex中是如何工作的。下面是我的意思的例子:

假设我们有一个简单的web应用程序,它包含扩展
Canvas
并实现
mx.managers.ifocusmanager组件的自定义组件。此组件覆盖
focusInHandler
focusOutHandler
方法,并显示有关如何调用它们的一些反馈(较薄或较厚的边框)。此自定义组件还包含一些
文本

组件的来源是:

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="100" creationComplete="cc();" implements="mx.managers.IFocusManagerComponent">
<mx:Script>
    <![CDATA[
        import mx.containers.Canvas;
        import mx.controls.Text;
        import mx.controls.TextArea;
        import mx.core.UIComponent;
        import mx.managers.IFocusManagerComponent;

        public function cc():void
        {
            text = new Text;
            text.text = "123";
            addChild(text);

            setStyle("backgroundColor", "0xddddff");
            setStyle("borderColor", "0x000000");
            setStyle("borderThickness", 1);
            setStyle("borderStyle", "solid");
        }

        private var text:Text;

        override protected function focusInHandler(e:FocusEvent):void {
            trace("focusInHandler, currFocus: " + focusManager.getFocus());
            setStyle("borderThickness", 4);
        }

        override protected function focusOutHandler(e:FocusEvent):void {
            trace("focusOutHandler, currFocus: " + focusManager.getFocus());
            setStyle("borderThickness", 1);
        }
    ]]>
</mx:Script>
</mx:Canvas>

以下是实时版本(带源代码视图):。在应用程序中,在
画布下方还有一个
文本区域
,用于在测试时简化焦点操作

问题:

  • 如果在紫色画布上单击一次,它会收到焦点(
    focusInHandler
    被调用),如果再次单击,焦点会丢失(
    focusOutHandler
    被调用)为什么?

  • 如果您单击
    文本
    画布
    接收焦点(
    focusInHandler
    调用),并在单击区域的任何位置时保持焦点(
    focusOutHandler
    nevet调用)为什么?

  • 也许我对焦点问题的理解是错误的谢谢您的建议。

    恕我直言


    拉法

    嘿,拉法里巴基。[我正在开会,不能真正花时间讨论这个问题,但我想我可以用一两个指针来帮助:]

    首先,画布的目的是与FocusManager进行交互,这与实现IfocusManager组件的组件不同。Canvas实现了IFocusManagerContainer,虽然您可以通过使容器成为IFocusManagerComponent来完成您想要完成的任务,但我会避免它,因为我尝试这样做,我认为flex sdk团队在使用内部组件时希望这样做

    我认为他们的目的是让你听你容器中的FocusEvent。默认情况下,FocusEvents冒泡,因此您可以通过一个简单的事件侦听器完成所需的大部分工作

    注意:侦听focusOut可能会与具有多个uicomponents作为子组件的组件混淆,即combobox具有一个UITextField和一个按钮,因此该组件具有多个focusOut和FocusIn事件,这些事件发生在同一组件中。您的救世主(我猜)将在focusManger.getFocus()项上执行container.contains()来精确设置您的样式

    我只是说说而已,所以如果你需要更多的帮助,或者想知道为什么focusIn或focusOut evt在被调度时会被调度——我很乐意为你编写一些代码,并解释为什么会捕获这种类型的事件。您的最佳选择(符合flex sdk指南)是从容器中使用事件侦听器,而不是同时使用IfocusManager组件和IfocusManager容器的组件。可能会弄得一团糟

    希望有帮助。祝你好运, 杰里米