gpt4 book ai didi

apache-flex - 焦点如何在 Flex 中工作?

转载 作者:行者123 更新时间:2023-12-04 03:13:10 26 4
gpt4 key购买 nike

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

假设我们有一个简单的 Web 应用程序,其中包含扩展 Canvas 的自定义组件。和实现 mx.managers.IFocusManagerComponent .此组件覆盖 focusInHandlerfocusOutHandler方法并显示有关如何调用它们的一些反馈(更细或更粗的边框)。这个自定义组件还包含一些 Text .

来源组件是:

<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>

这是实时版本(带有源代码 View ): http://rafalrybacki.com/lab/focus_question/ .在应用程序中还有一个 TextArea下方 Canvas - 在测试时简化焦点操作。

问题:
  • 如果您在紫色 Canvas 上单击一次,它会获得焦点(调用 focusInHandler),然后如果再次单击,焦点将丢失(调用 focusOutHandler)- 为什么?
  • 你点击一个 Text Canvas接收焦点( focusInHandler 调用)并在单击该区域的任何位置时保持它(focusOutHandler nevet 调用) - 为什么?

  • 也许我对整个焦点问题的理解是错误的? 谢谢你的任何建议。

    尊重地,

    拉法尔

    最佳答案

    嘿拉法里巴基。 [我正在开会,不能真正花时间在这个问题上,但我想我可以提供一两个提示:]

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

    我认为他们打算让您收听容器中的 FocusEvent。 FocusEvents 默认冒泡,因此您可以使用简单的事件监听器完成您需要的大部分工作。

    注意:听 focusOut 可能会混淆具有多个 uicomponents 作为子级的组件 --- 即组合框有一个 UITextField 和一个 Button,因此该组件有多个 FocusOut 和 FocusIn 事件发生在同一组件中。你的救星将(我猜)在一个 focusManger.getFocus() 项目上做一个 container.contains() 来准确地设置你的风格。

    我只是胡说八道,所以如果你需要一些帮助,或者想知道更多关于为什么在调度时调度 focusIn 或 focusOut evt - 我很乐意为你拍一些代码并解释为什么要捕获事件类型。您最好的选择(以符合 flex sdk 指南)是在容器内使用事件监听器,而不是与既是 IFocusManagerComponent 又是 IFocusManagerContainer 的组件发生冲突。可能会变得凌乱。

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

    关于apache-flex - 焦点如何在 Flex 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5032144/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com