<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>flex</title>
    <description>flex2的学习和交流</description>
    <link>http://flex2.group.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>《BlazeDS开发指南》学习笔记（二）：两个示例</title>
        <author>WaterSugar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jfp.javaeye.com">WaterSugar</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/251290" style="color:red;">http://flex2.group.javaeye.com/group/blog/251290</a>&nbsp;
          发表时间: 2008年10月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;　　按照手册内容，这里给出两个客户端和服务端示例代码，你可以编译、部署到BlazeDS服务器中进行体验，我使用的编辑器是Eclipse 3.4 + Flex Builder Plunin&nbsp;3.0.1，BlazeDS使用的二进制包，服务器是Tomcat 6.0.18，而构建一个BlazeDS应用程序的一般流程如下：</p>
<p>&nbsp;</p>
<p>　　1、在WEB-INF/flex目录下的配置文件（一般为remoting-config.xml)中配置一个目的（destination），用他来进行客户端和服务端数据交换；</p>
<p>　　2、在WEB-INF/flex目录下的配置文件（services-config.xml)中配置一个通道（channel），用它来封装数据以进行数据的网络传送；</p>
<p>　　3、用MXML或者ActionScript编写Flex客户端；</p>
<p>　　4、将客户端程序编译为SWF文件，并将它部署在BlazeDS服务器中。</p>
<p>&nbsp;</p>
<p>　　<span style="font-size: medium;"><strong>一、RPC服务例子</strong></span></p>
<p>&nbsp;</p>
<p>　　Remoting Service是BlazeDS服务器中RPC服务的一种，它能够让客户端访问服务端POJOs的方法。在这个例子中，首先在服务端部署一个Java类：EchoService，用来返回客户端发送过来的字符串，具体代码如下：</p>
<p>&nbsp;</p>
<pre name="code" class="java">package remoting;

public class EchoService
{
　　public String echo(String text) {
　　　　return "Server says: I received '" + text + "' from you";
　　}
}</pre>
<p>&nbsp;</p>
<p>&nbsp;　　echo()方法带有一个字符串的参数，并将它与另外一些字符串组合后返回。将该文件编译，把生成的EchoService.class文件拷贝到WEB-INF/classes/remoting目录下。</p>
<p>&nbsp;</p>
<p>　　接下来，在WEB-INF/flex/remoting-config.xml文件中定义目的，代码如下：</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;destination id="echoSericeDest" channels="my-amf"&gt;
　　&lt;properties&gt;
　　　　&lt;source&gt;remoting.EchoService&lt;/source&gt;
　　&lt;/properties&gt;
&lt;/destination&gt;</pre>
<p>&nbsp;</p>
<p>　　source定义了目的相对应的具体Java类，而channels定义了该目的使用的通道，而通道的定义则在WEB/flex/services-config.xml文件中定义，具体如下：</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"&gt;
 　　&lt;endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint" /&gt;
　　&lt;properties&gt;
　　　　&lt;polling-enabled&gt;false&lt;/polling-enabled&gt;
　　&lt;properties&gt;
&lt;/channel-definition&gt;</pre>
<p>&nbsp;</p>
<p>　　服务端的工作完成了，如果使用的是BlazeDS的二进制版本（blazeds.war），在Flex Builder环境下，其中通道的定义默认就完成了，而在目的的定义中，存在一个默认的通道配置（default-channels），所以，在定义目的的时候如果是使用的默认通道配置也可以省略通道。</p>
<p>&nbsp;</p>
<p>　　客户端编码主要就是Flex的开发，用到的控件主要就是RemoteObject，在该示例中就是很简单的在文本框中显示返回的结果，代码如下：</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%"&gt;

&lt;mx:Script&gt;
　　&lt;![CDATA[
　　　　import mx.rpc.events.FaultEvent;
　　　　import mx.rpc.events.ResultEvent;

　　　　private function resultHandle(event:ResultEvent):void
　　　　{
　　　　　　ta.text += "Server responded: " + event.result + "\n";
　　　　}

　　　　private function faultHandle(event:FaultEvent):void
　　　　{
　　　　　　ta.text += "Received fault: " + event.fault + "\n";
　　　　}

　　　　private function echo():void
　　　　{
　　　　　　var text:String = ti.text;
　　　　　　ro.echo(text);
　　　　}
　　]]&gt;
&lt;/mx:Script&gt;

&lt;mx:RemoteObject id="ro" destination="echoServiceDest" result="resultHandle(event);" fault="faultHandle(event);" /&gt;
&lt;mx:Label text="Enter a text fro the server to echo" /&gt;
&lt;mx:TextInput id="ti" text="Hello world!" /&gt;
&lt;mx:Button label="Send" click="echo();" /&gt;
&lt;mx:TextArea id="ta" width="100%" height="100%" /&gt;
&lt;/mx:Application&gt;</pre>
<p>&nbsp;</p>
<p>　　将该文件编译成SWF文件，然后部署到BlazeDS服务器中，启动Tomcat服务器，在浏览器中浏览该文件，将会看到运行的结果，如下图。</p>
<p>&nbsp;</p>
<p><img src="/upload/picture/pic/23101/8e2f8b3e-94c3-3c18-972a-1319449e7305.jpg" height="111" alt="" width="612" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;　　<span style="color: #ff0000;">另一个示例看下一篇文章：消息服务示例。</span></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/251290#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 10 Oct 2008 14:37:59 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/251290</link>
        <guid>http://flex2.group.javaeye.com/group/blog/251290</guid>
      </item>
          <item>
        <title>《BlazeDS开发指南》学习笔记（一）：概述</title>
        <author>WaterSugar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jfp.javaeye.com">WaterSugar</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/250606" style="color:red;">http://flex2.group.javaeye.com/group/blog/250606</a>&nbsp;
          发表时间: 2008年10月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>　　<strong><span style="font-size: medium;">一、概述</span></strong></p>
<p>&nbsp;</p>
<p>　　BlazeDS是Adobe公司发布的免费开源产品，是该公司另一个收费产品LCDS的简化开源版本，BlazeDS使用Java语言在服务端提供如下功能：</p>
<p>&nbsp;</p>
<p>　　1、提供客户端（Flex、AIR）通过AMF协议访问服务端（Java）数据的功能；</p>
<p>　　2、提供服务端广播数据给多个客户端的功能；</p>
<p>　　3、提供客户端与客户端实时通信的功能；</p>
<p>&nbsp;</p>
<p>　　一个BlazeDS应用程序包括两个部分：客户端应用程序和服务端J2EE应用程序，如下图：</p>
<p>&nbsp;<img src="/upload/picture/pic/22939/d1eb60b0-fc12-3639-a256-30d039c7d98c.jpg" height="269" alt="" width="329" /></p>
<p>　　客户端程序：一个BlazeDS应用的客户端程序一般为Flex或AIR，而Flex或AIR程序通过Flex SDK中的控件RemoteObject、HTTPService、Producer、Consumer与BlazeDS服务端通信，另外，你也可以结合Flex、HTML和JavaScript技术来构建客户端程序，更可以在HTML和JavaScript中使用Ajax客户端库来与BlazeDS通信。</p>
<p>&nbsp;</p>
<p>　　服务端程序：BlazeDS服务端运行在基于J2EE的Web服务器中，通过如下配置可以使得一个J2EE Web服务器支持BlazeDS：</p>
<p>　　1、拷贝BlazeDS的jar文件和相关依赖jar文件到WEB-INF/lib目录下；</p>
<p>　　2、编辑WEB-INF/flex目录下BlazeDS的配置文件；</p>
<p>　　3、在WEB-INF/web.xml文件中定义MessageBrokerServlet和Session监听器；</p>
<p>&nbsp;</p>
<p>　　<strong><span style="font-size: medium;">二、特点</span></strong></p>
<p>&nbsp;</p>
<p>　　下图详细展示了BlazeDS的主要特点：</p>
<p>&nbsp;<img src="/upload/picture/pic/22941/b04c9120-0a27-3abe-b9b3-4b9f2149ad4d.jpg" height="279" alt="" width="328" /></p>
<p>&nbsp;　　1、RPC Services（RPC服务）：RPC服务被设计成为调用和响应的模式，这对应用程序访问外部数据是一种很好的选择，它能够使客户端异步请求远程服务并直接把结果返回，在具体程序中，可以使用客户端的RPC控件如HTTP GET或HTTP POST（HTTP Services）、SOAP（Web Services）、Java Objects（RemoteObject Services）访问RPC Services。</p>
<p>&nbsp;</p>
<p>　　如果你想通过使用RPC Services提供一些企业级功能，如不同域之间数据交换的代理功能、客户端认证、服务器端日志、本地化支持、RPC Services服务集中化管理等功能时，BlazeDS通过使用RemoteObject控件可以轻松实现，而不需要配置他们像SOAP-compliant网络服务。</p>
<p>&nbsp;</p>
<p>　　当客户端RPC控件调用远程服务时，该控件就会把服务端返回的数据保存在一个ActionScript对象中，这样，在程序中就能够很轻松的获取该要的数据，而这些客户端控件包括HTTPService、WebService、RemoteObject控件。</p>
<p>&nbsp;</p>
<p>　　2、Messaging Services（消息服务）：消息服务就是通过服务器端来回的传送消息以实现客户端的异步交流，一条消息由唯一标识号、BlazeDS头、其他自定义头和消息体组成。</p>
<p>&nbsp;</p>
<p>　　客户端程序中发送消息的部分称为消息生产者（producers)，在Flex程序中可以通过Producer控件定义，而接收消息的部分称为消息消费者（consumer），在Flex中可以通过Consumer控件定义，Consumer控件负责订阅和接收服务器端某一个目的地的消息，而Producer控件负责向该目的地发送消息。</p>
<p>&nbsp;</p>
<p>　　消息服务同时也支持通过JMSAdapter实现的桥接模式来访问外部的JMS服务器，这使得Flex程序能够与外部的Java应用程序实现数据交流。</p>
<p>&nbsp;</p>
<p>　　3、Service adapters：BlazeDS可以访问各种不同的数据持久化方案，比如数据库、JMS等其他持久化机制。</p>
<p>&nbsp;</p>
<p>　　4、The message-based framework（基于消息的框架）：BlazeDS在客户端和服务器端来回的传送数据，他是一个基于消息的框架，主要运用了两种交换模式，第一种，请求/响应模式，客户端发送请求给服务端，服务端处理好之后返回一个包含结果的响应，RPC服务就是使用的这种模式；第二种，发布/订阅模式，服务端将数据发布给订阅了该消息的客户端列表，消息服务就是使用这种模式来发布数据给各客户端的，同时，消息服务也使用请求/响应模式来解决一些发布消息、数据交换等问题。</p>
<p>&nbsp;</p>
<p>　　5、Channels and endpoints（通道和端点）：在网络上，客户端是通过通道与服务端传送数据的，通道负责封装消息格式、网络协议、解析方式、目的和应用代码，负责格式化和翻译消息为特定网络下的模式，然后分发给相应的端点。另外，通道使得客户端发送给服务端的消息变得有序性和对应性，这对数据传送的一致性和可预见性起到重要的作用。</p>
<p>&nbsp;</p>
<p>　　在服务器端，通道是与基于Java的端点发生交换的，端点负责解析消息成特定的协议模式，然后把它传送给普通Java形式的&ldquo;消息代理人&rdquo;（Message Broker），最终由消息代理人决定该消息发往何处，路由给恰当的目的地，详细如下图所示：</p>
<p><img src="/upload/picture/pic/22983/76d6cf24-1da3-3106-bdae-f1e354b0ec5a.jpg" height="250" alt="" width="360" /></p>
<p>　　6、Channel types（通道类型）：BlazeDS提供以下几种通道：（1）标准AMF通道；（2）加密AMF通道；（3）HTTP通道（AMFX）。其中AMF和HTTP通道都支持无轮询的请求/响应模式和客户端轮询模式（模拟实时通信），而AMF和HTTP流通道模式提供了真正的数据流实时模式。</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/250606#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Oct 2008 10:20:27 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/250606</link>
        <guid>http://flex2.group.javaeye.com/group/blog/250606</guid>
      </item>
          <item>
        <title>关于Flex的开发框架选择</title>
        <author>ltian</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ltian.javaeye.com">ltian</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/247161" style="color:red;">http://flex2.group.javaeye.com/group/blog/247161</a>&nbsp;
          发表时间: 2008年09月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>我在博客中上传了所翻译的cairongorm的教程和pureMvc的中文API。结合一段时间的实践，我认为，这些框架均不实用。</p>
<p>cairongorm过于死板，完成一个工作需要N多类。</p>
<p>pureMvc虽然比较灵活，考虑了视图的复用。但是工程大而视图复用很少的时候，使用这个框架非常不合适。</p>
<p>因为不论cairongorm和pureMvc都是基于事件（消息），一个事件（消息）发出后，就很难知道那些组件对这些事件和消息感兴趣，也很难知道那个组件对这个消息或者事件进行了监听和处理。造成程序的调试和维护相当困难。很多隐藏的BUg都是因此而产生的。</p>
<p>所以我建议不要使用这两个框架。</p>
<p>&nbsp;</p>
<p>我建议开发者按照如下思路进行Flex开发。</p>
<p>1.写一个mxml文件和一个as文件，二者名称相同但是扩展名不同。</p>
<p>2.mxml文件作为视图（和部分控制），as文件作为module（和部分控制）。</p>
<p>&nbsp;&nbsp; module上定义视图所需要的数据和数据的处理逻辑（比如，获取远程的数据等）。</p>
<p>&nbsp; mxml上的控件绑定module上的数据。module无需知道mxml，mxml在创建时需要引用module。</p>
<p>3.当用户操作界面发生请求需要处理数据时，mxml上的响应控件事件的处理函数调用module上的方法，改变数据，改变后的数据通过绑定功能自动地刷新界面（mxml所生成的swf）。</p>
<p>&nbsp;</p>
<p>这样做的最大好处就是便于调试，其次是把视图部分和数据以及数据处理部分分离，当视图上的控件发生变化不会影响数据处理的业务。</p>
<p>&nbsp;</p>
<p>当实在需要视图复用时，可以考虑使用pureMvc框架。</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/247161#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 26 Sep 2008 17:11:42 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/247161</link>
        <guid>http://flex2.group.javaeye.com/group/blog/247161</guid>
      </item>
          <item>
        <title>Flex入门学习体会(二)</title>
        <author>xxqn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xxqn.javaeye.com">xxqn</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/246963" style="color:red;">http://flex2.group.javaeye.com/group/blog/246963</a>&nbsp;
          发表时间: 2008年09月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          3、如何传递mxml到actionScript。<br />&nbsp;&nbsp;&nbsp; mxml最终会编译成actionScript，所以mxml本质上就是actionScript，只不过代码的表现形式不同而已，那如何传递mxml到actionScript？<br />App.mxml文件部分代码：<br /><pre name="code" class="java">
var asTest:myAsClass=new myAsClass(this);
</pre><br />this就是App.mxml文件了。<br /><pre name="code" class="java">
public class myAsClass{
	var _app:App;
     public function myAsClass(app:App)
	{
		_app=app;
	}
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/246963#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 26 Sep 2008 10:58:15 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/246963</link>
        <guid>http://flex2.group.javaeye.com/group/blog/246963</guid>
      </item>
          <item>
        <title>Flex入门学习体会(一)</title>
        <author>xxqn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xxqn.javaeye.com">xxqn</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/246022" style="color:red;">http://flex2.group.javaeye.com/group/blog/246022</a>&nbsp;
          发表时间: 2008年09月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          刚开始学习Flex遇到许多问题。由于本人熟悉java，下面是一些体会也会与java有关：<br />1、flex是单线程的；<br />2、与后台的交互是异步的，同时因为是单线程的原因，所以使用与后台的交互时必须使用回调函数。<br />提交的时候用在方法尾部加lastResult，回调函数在方法尾部加result。<br />例子<br /><pre name="code" class="actionScript 3">

var publicinfo:SeamRemoteObject=new SeamRemoteObject();
var _publicServer:PublicServer;
				
public function PublicInfoCreat()
{
	publicinfo.destination="publicPageInfo";
	publicinfo.getFlexPublicInfo.addEventListener(ResultEvent.RESULT,publicCallBack);  //注册回调函数
	publicinfo.getFlexPublicInfo().<span style="color: red">lastResult</span>;  //发送请求
}
		
private function publicCallBack(evt:ResultEvent):void{
	//回调函数
	_publicServer=evt.<span style="color: red">result</span> as PublicServer;
	//trace(_publicServer.requestContextPath);
}


</pre><br />随着学习再添加其他的体会。
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/246022#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 23 Sep 2008 18:01:18 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/246022</link>
        <guid>http://flex2.group.javaeye.com/group/blog/246022</guid>
      </item>
          <item>
        <title>Flex3 cookbook 翻译: 3.2 根据比例设定对象的位置和尺寸</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/243674" style="color:red;">http://flex2.group.javaeye.com/group/blog/243674</a>&nbsp;
          发表时间: 2008年09月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 16.0pt;"><span lang="en-US" style="font-family: Verdana;">3.2 </span><span lang="zh-CN" style="font-family: 宋体;">根据比例设定对象的位置和尺寸</span></p>
<p style="margin: 0in; font-weight: bold; font-size: 12.0pt;"><span lang="en-US" style="font-family: Verdana;">3.2.1 </span><span lang="zh-CN" style="font-family: 宋体;">问题</span></p>
<p style="margin: 0in; font-family: 宋体; font-size: 10.0pt;">你需要依据其父控件的尺寸来确定子对象的大小。</p>
<p style="margin: 0in; font-weight: bold; font-size: 12.0pt;"><span lang="en-US" style="font-family: Verdana;">3.2.2 </span><span lang="zh-CN" style="font-family: 宋体;">解答</span></p>
<p style="margin: 0in; font-size: 10.0pt;"><span lang="zh-CN" style="font-family: 宋体;">用百分比调整尺寸，这样如果组件的尺寸变了，</span><span lang="en-US" style="font-family: Verdana;">Flex</span><span lang="zh-CN" style="font-family: 宋体;">框架会自动调整它的子对象的大小。</span></p>
<p style="margin: 0in; font-weight: bold; font-size: 12.0pt;"><span lang="en-US" style="font-family: Verdana;">3.2.3 </span><span lang="zh-CN" style="font-family: 宋体;">讨论</span></p>
<p style="margin: 0in; font-size: 10.0pt;"><span lang="zh-CN" style="font-family: 宋体;">百分比布局是强有力的工具，它可以让你很容易地根据父对象来确定子对象的大小和位置。例如，如下的</span><span lang="zh-CN" style="font-family: Verdana;">RelativePositioningChild.mxml</span><span lang="zh-CN" style="font-family: 宋体;">组件按照父对象的宽的</span><span lang="en-US" style="font-family: Verdana;">40%</span><span lang="zh-CN" style="font-family: 宋体;">和高的</span><span lang="en-US" style="font-family: Verdana;">70%</span><span lang="zh-CN" style="font-family: 宋体;">来布局。</span></p>
<p style="margin: 0in; font-family: Verdana; font-size: 10.0pt;">&nbsp;</p>
<pre name="code" class="java">&lt;mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="40%" height="70%" background
Color="#0033ff"&gt;
    &lt;mx:Image source="@Embed('../../assets/image.png')"/&gt;
    &lt;mx:Image source="@Embed('../../assets/image.png')"/&gt;
&lt;/mx:VBox&gt;

</pre>
<p>
&nbsp;</p>
<p>&nbsp;</p>
<p style="margin: 0in; font-size: 10.0pt;"><span style="font-family: 宋体;">在下面的例子中，</span><span style="font-family: Verdana;">RelativePositioningChild</span><span style="font-family: 宋体;">的多个实例放到了一个父容器里，这个容器也是按比例确定尺寸的。无论它被添加到哪个容器，这个父容器将决定它的大小，进而决定它的子对象的大小。</span></p>
<p style="margin: 0in; font-family: Verdana; font-size: 10.0pt;">&nbsp;</p>
<pre name="code" class="java">&lt;mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="75%" height="50%" background
Color="#0099ff" alpha="0.3" xmlns:cookbook="oreilly.cookbook.*"&gt;
    &lt;cookbook:RelativePositioningChild/&gt;
    &lt;cookbook:RelativePositioningChild/&gt;
&lt;/mx:HBox&gt;</pre>
<p>
&nbsp;</p>
<p>&nbsp;</p>
<p style="margin: 0in; font-size: 10.0pt;"><span style="font-family: 宋体;">为了说明比例尺寸的效果，上面的程序片段被保存为</span><span style="font-family: Verdana;">RelativePositioningParent.mxml</span><span style="font-family: 宋体;">，并在下面使用：<span style="font-family: Verdana; font-size: 12px; white-space: pre;">&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" </span></span></p>
<pre name="code" class="java">xmlns:cookbook="oreilly.cookbook.*"&gt;
    &lt;mx:Script&gt;
        &lt;![CDATA[

            private function changeWidth():void
            {
                this.width = slider.value*150;
            }

        ]]&gt;
    &lt;/mx:Script&gt;
    &lt;cookbook:RelativePositioningParent/&gt;
    &lt;mx:HSlider id="slider" change="changeWidth()"/&gt;
&lt;/mx:Application&gt;</pre>
<p>&nbsp;</p>
<p style="margin: 0in; font-size: 10.0pt;"><span style="font-family: 宋体;">当滑块改变应用的宽度时，</span><span style="font-family: Verdana;">RelativePositioningParent</span><span style="font-family: 宋体;">和</span><span style="font-family: Verdana;">RelativePositioningChild</span><span style="font-family: 宋体;">根据它们的父对象重新确定自己的大小和位置。</span></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/243674#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 18 Sep 2008 18:26:43 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/243674</link>
        <guid>http://flex2.group.javaeye.com/group/blog/243674</guid>
      </item>
          <item>
        <title>Flex 3 cookbook翻译: 3.1 用布局管理器定位子对象</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/243310" style="color:red;">http://flex2.group.javaeye.com/group/blog/243310</a>&nbsp;
          发表时间: 2008年09月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 18pt;"><span style="font-family: Verdana;">3 </span>
<span style="font-family: 宋体;">容器</span>
</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">.</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">容器</span>
<span style="font-family: Verdana;">(containers)</span>
<span style="font-family: 宋体;">这个词通常指的是在</span>
<span style="font-family: Verdana;">Flex</span>
<span style="font-family: 宋体;">框架的</span>
<span style="font-family: Verdana;">mx.containers</span>
<span style="font-family: 宋体;">包里面的所有类。容器扩展自</span>
<span style="font-family: Verdana;">UIComponent</span>
<span style="font-family: 宋体;">类，添加了布局管理功能，用创建法则（</span>
<span style="font-family: Verdana;">creation policies)</span>
<span style="font-family: 宋体;">控制子对象的创建的一系列方法，并自动卷动。各个容器的行为有很大的不同，不过都有定位子对象，用约束或样式布局子对象的能力，并控制卷动，觉得子对象对卷动事件的响应。</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">对</span>
<span style="font-family: Verdana;">Flex 3</span>
<span style="font-family: 宋体;">而言，约束是个新东西。它们让开发者从位置和尺寸两个方面创建定位的规则，并指派给容器的子对象。只有容器才有约束，比如</span>
<span style="font-family: Verdana;">Canvas</span>
<span style="font-family: 宋体;">容器，</span>
<span style="font-family: Verdana;">Canvas</span>
<span style="font-family: 宋体;">也可以绝对定位，这跟</span>
<span style="font-family: Verdana;">CSS</span>
<span style="font-family: 宋体;">的作用几乎一样。</span>
<span style="font-family: Verdana;">Box</span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;">Tile</span>
<span style="font-family: 宋体;">容器提供了子对象的自动布局，还有控制包含在布局管理器里的子对象的方法。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Verdana;">3.1 </span>
<span style="font-family: 宋体;">用布局管理器定位子对象</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">3.1.1 </span>
<span style="font-family: 宋体;">问题</span>
</p>
<p style="margin: 0in; font-family: 宋体; font-size: 10pt;">你需要水平或垂直定位多个子对象，并控制这些子对象的布局。</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">3.1.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">用</span>
<span style="font-family: Verdana;">HBox</span>
<span style="font-family: 宋体;">或</span>
<span style="font-family: Verdana;">VBox</span>
<span style="font-family: 宋体;">容器，为</span>
<span style="font-family: Verdana;">HBox</span>
<span style="font-family: 宋体;">或</span>
<span style="font-family: Verdana;">VBox</span>
<span style="font-family: 宋体;">设置水平间距（</span>
<span style="font-family: Verdana;">horizontalGap</span>
<span style="font-family: 宋体;">）或垂直间距（</span>
<span style="font-family: Verdana;">verticalGap</span>
<span style="font-family: 宋体;">），相应地，设置组件之间的距离。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">3.1.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">扩展自相同的基类</span>
<span style="font-family: Verdana;">mx.containers.Box, HBox</span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;">VBox</span>
<span style="font-family: 宋体;">组件水平地或垂直地布局它们的子对象，他们各自可以包含无数个子对象。</span>
<span style="font-family: Verdana;"> </span>
<span style="font-family: 宋体;">当子对象的尺寸大于</span>
<span style="font-family: Verdana;">Box</span>
<span style="font-family: 宋体;">组件的高或宽时，该</span>
<span style="font-family: Verdana;">Box</span>
<span style="font-family: 宋体;">组件会默认添加相应的滚动条。要确定子对象之间的距离，</span>
<span style="font-family: Verdana;">VBox</span>
<span style="font-family: 宋体;">容器用</span>
<span style="font-family: Verdana;">verticalGap</span>
<span style="font-family: 宋体;">属性，</span>
<span style="font-family: Verdana;">HBox</span>
<span style="font-family: 宋体;">容器用</span>
<span style="font-family: Verdana;">horizontalGap</span>
<span style="font-family: 宋体;">属性。比如：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:VBox width=&quot;400&quot; height=&quot;300&quot; verticalGap=&quot;20&quot;&gt;
        &lt;mx:Button label=&quot;Button&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Link Button&quot;/&gt;
    &lt;/mx:VBox&gt;</pre>
<p>
&nbsp;
<img src="../../../upload/attachment/39141/8ba33d38-0a37-335d-ad5f-29d157e71f81.jpg" height="66" alt="" width="89" />
</p>
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">可是</span>
<span style="font-family: Verdana;">HBox</span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;">VBox</span>
<span style="font-family: 宋体;">容器不考虑上，下，左，右的约束属性。要在子对象和它们的</span>
<span style="font-family: Verdana;">Box</span>
<span style="font-family: 宋体;">容器之间添加空隙，用如下的</span>
<span style="font-family: Verdana;">Spacer</span>
<span style="font-family: 宋体;">控件：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:VBox width=&quot;400&quot; height=&quot;300&quot; verticalGap=&quot;20&quot;&gt;
        &lt;mx:Button label=&quot;Button&quot;/&gt;
        &lt;mx:ComboBox top=&quot;60&quot;/&gt;
        &lt;mx:Spacer height=&quot;20&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Link Button&quot;/&gt;
    &lt;/mx:VBox&gt;</pre>
<p>
&nbsp;
<img src="../../../upload/attachment/39139/3644302b-8ca6-3d20-ad1e-2a9c01c2d966.jpg" height="156" alt="" width="172" />
</p>
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">要改变子对象的边缘之间的距离或距离填充样式，添加</span>
<span style="font-family: Verdana;">paddingTop, paddingLeft, paddingRight, </span>
<span style="font-family: 宋体;">或</span>
<span style="font-family: Verdana;"> paddingBottom</span>
<span style="font-family: 宋体;">样式。这会影响到所以添加到容器内的子对象。如果要左右移动</span>
<span style="font-family: Verdana;">VBox</span>
<span style="font-family: 宋体;">里或上下移动</span>
<span style="font-family: Verdana;">HBox</span>
<span style="font-family: 宋体;">里的单个子对象，就在</span>
<span style="font-family: Verdana;">Box</span>
<span style="font-family: 宋体;">里添加一个容器，用他来定位子对象：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java"> &lt;mx:HBox x=&quot;400&quot; horizontalGap=&quot;10&quot; top=&quot;15&quot;&gt;
        &lt;mx:Canvas&gt;
            &lt;mx:Button top=&quot;50&quot; label=&quot;Button&quot; y=&quot;20&quot;/&gt;
        &lt;/mx:Canvas&gt;
        &lt;mx:Panel height=&quot;40&quot; width=&quot;40&quot;/&gt;
        &lt;mx:Spacer width=&quot;25&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Label&quot;/&gt;
        &lt;mx:ComboBox/&gt;
    &lt;/mx:HBox&gt;</pre>
<p>
&nbsp; <img src="../../../upload/attachment/39137/ce1212fe-f67d-32a2-8f05-937fe9360213.jpg" height="104" alt="" width="418" />
</p>
<p>&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">下面这个例子在一个</span>
<span style="font-family: Verdana;">Canvas</span>
<span style="font-family: 宋体;">容器内用到了</span>
<span style="font-family: Verdana;">HBox</span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;">VBox</span>
<span style="font-family: 宋体;">来显示以上两种布局方式：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:Canvas xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; &gt;
    &lt;mx:VBox width=&quot;400&quot; height=&quot;300&quot; verticalGap=&quot;20&quot;&gt;
        &lt;mx:Button label=&quot;Button&quot;/&gt;
        &lt;mx:ComboBox/&gt;
        &lt;mx:Spacer height=&quot;20&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Link Button&quot;/&gt;
    &lt;/mx:VBox&gt;
    &lt;mx:HBox x=&quot;400&quot; horizontalGap=&quot;10&quot; top=&quot;15&quot;&gt;
        &lt;mx:Canvas&gt;
            &lt;mx:Button top=&quot;50&quot; label=&quot;Button&quot; y=&quot;20&quot;/&gt;
        &lt;/mx:Canvas&gt;
        &lt;mx:Panel height=&quot;40&quot; width=&quot;40&quot;/&gt;
        &lt;mx:Spacer width=&quot;25&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Label&quot;/&gt;
        &lt;mx:ComboBox/&gt;
    &lt;/mx:HBox&gt;
&lt;/mx:Canvas&gt;</pre>
&nbsp;
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/243310#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 18 Sep 2008 00:25:06 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/243310</link>
        <guid>http://flex2.group.javaeye.com/group/blog/243310</guid>
      </item>
          <item>
        <title>Flex 3 cookbook翻译:  2.14 处理focusIn和focusOut事件</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/243297" style="color:red;">http://flex2.group.javaeye.com/group/blog/243297</a>&nbsp;
          发表时间: 2008年09月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Verdana;">2.14 </span>
<span style="font-family: 宋体;">处理</span>
<span style="font-family: Verdana;">focusIn</span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;">focusOut</span>
<span style="font-family: 宋体;">事件</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.14.1 </span>
<span style="font-family: 宋体;">问题</span>
</p>
<p style="margin: 0in; font-family: 宋体; font-size: 10pt;">当用户的焦点在一个标签控件上时，你想显示一个弹出窗口，而当用户焦点离开该标签控件时，弹出窗口关闭。</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.14.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">用</span>
<span style="font-family: Verdana;">focusIn</span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;">focusOut</span>
<span style="font-family: 宋体;">事件（所有继承自</span>
<span style="font-family: Verdana;">InteractiveObject</span>
<span style="font-family: 宋体;">的类的实例均有该事件）去执行</span>
<span style="font-family: Verdana;">PopUpManager</span>
<span style="font-family: 宋体;">的恰当的方法。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.14.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Verdana;"></span>
<span style="font-family: 宋体;">基于用户焦点来触发窗口，你可以修改先前的两个方法。以前是当用户单击</span>
<span style="font-family: Verdana;">LinkButton</span>
<span style="font-family: 宋体;">时弹出窗口，现在改成由</span>
<span style="font-family: Verdana;">focusIn</span>
<span style="font-family: 宋体;">事件触发。当组件接收到焦点时，就触发一个</span>
<span style="font-family: Verdana;">focusIn</span>
<span style="font-family: 宋体;">事件。比如当用户用</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键跳到该控件，或者用鼠标点击该控件。</span>
<span style="font-family: Verdana;">focusIn</span>
<span style="font-family: 宋体;">事件的处理代码添加了如下内容：</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Verdana;"><span>&nbsp;&nbsp;&nbsp;
</span>
systemManager.removeFocusManager(IFocusManagerContainer(popup))<br />
</span>
<span style="font-style: italic; font-family: 宋体;">译者注：移除这句代码，如果用鼠标交互，不影响程序运行效果。如果用</span>
<span style="font-style: italic; font-family: Verdana;">tab</span>
<span style="font-style: italic; font-family: 宋体;">键切换焦点，就会出现错误。</span>
</p>
<p style="margin: 0in; font-family: 宋体; font-size: 10pt;">这儿是代码：</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:Application
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;absolute&quot;&gt;

    &lt;mx:Canvas horizontalCenter=&quot;0&quot; verticalCenter=&quot;0&quot;&gt;
        &lt;mx:LinkButton id=&quot;lbl&quot; label=&quot;Top&quot; x=&quot;100&quot; y=&quot;10&quot; focusIn=&quot;showDetail(event)&quot;
 focusOut=&quot;closePopUp()&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Left&quot; x=&quot;10&quot; y=&quot;100&quot; focusIn=&quot;showDetail(event)&quot;
focusOut=&quot;closePopUp()&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Bottom&quot; x=&quot;100&quot; y=&quot;200&quot; focusIn=&quot;showDetail(event)&quot;
focusOut=&quot;closePopUp()&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Right&quot; x=&quot;200&quot; y=&quot;100&quot; focusIn=&quot;showDetail(event)&quot;
focusOut=&quot;closePopUp()&quot;/&gt;
        &lt;mx:Canvas width=&quot;100&quot; height=&quot;100&quot; x=&quot;125&quot; y=&quot;40&quot;
            backgroundColor=&quot;#ff0000&quot; rotation=&quot;45&quot;&gt;
        &lt;/mx:Canvas&gt;
    &lt;/mx:Canvas&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[
            import mx.managers.IFocusManagerContainer;
            import mx.managers.PopUpManager;

            private const POPUP_OFFSET:int = 10;

            private var popup:CustomPopUp;

            private function showDetail(evt:FocusEvent):void {
                // create the popup
                popup = CustomPopUp(PopUpManager.createPopUp(this,CustomPopUp,false));
                popup.message = &quot;This is the detail for &quot; + evt.target.label;

                // position the popup
                var pt:Point = new Point(0, 0);
                pt = evt.target.localToGlobal(pt);
                popup.x = pt.x  + POPUP_OFFSET;
                popup.y = pt.y  + evt.target.height + POPUP_OFFSET;

                systemManager.removeFocusManager(IFocusManagerContainer(popup))
            }

            private function closePopUp():void {
                PopUpManager.removePopUp(popup);
            }

        ]]&gt;
    &lt;/mx:Script&gt;
&lt;/mx:Application&gt;</pre>
&nbsp;
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">当一个弹出窗口被创建时，默认地，</span>
<span style="font-family: Verdana;">SystemManager</span>
<span style="font-family: 宋体;">触发</span>
<span style="font-family: Verdana;">FocusManager</span>
<span style="font-family: 宋体;">，让它与该弹出窗口关联起来。并让焦点循环（控制</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键顺序）基于刚被创建的弹出窗口。在本例中，我们期望一种不同的行为：当用户焦点移出一个弹出窗口（例如，用</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键使焦点移出该控件），该窗口应当被关闭。从</span>
<span style="font-family: Verdana;">SystemManager</span>
<span style="font-family: 宋体;">里移除弹出窗口的</span>
<span style="font-family: Verdana;">FocusManager</span>
<span style="font-family: 宋体;">能实现这一点，并能让整个应用的</span>
<span style="font-family: Verdana;">FocusManager</span>
<span style="font-family: 宋体;">重新起作用。</span>
<span style="font-family: Verdana;">focusOut</span>
<span style="font-family: 宋体;">事件的处理器</span>
<span style="font-family: Verdana;">closePopUp</span>
<span style="font-family: 宋体;">包含了关闭弹出窗的逻辑。当应用运行起来后，反复按</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键，焦点会在这些</span>
<span style="font-family: Verdana;">LinkButton</span>
<span style="font-family: 宋体;">之间循环，而且相应的弹出窗会被创建或移除。</span>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/243297#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 17 Sep 2008 22:55:58 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/243297</link>
        <guid>http://flex2.group.javaeye.com/group/blog/243297</guid>
      </item>
          <item>
        <title>Flex 3 cookbook翻译:  2.13 为弹出窗口创建自定义边框</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/243222" style="color:red;">http://flex2.group.javaeye.com/group/blog/243222</a>&nbsp;
          发表时间: 2008年09月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Verdana;">2.13 </span>
<span style="font-family: 宋体;">为弹出窗口创建自定义边框</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.13.1 </span>
<span style="font-family: 宋体;">问题</span>
</p>
<p style="margin: 0in; font-family: 宋体; font-size: 10pt;">你想为弹出窗口定义边框，让它显示一个标记，来指出是哪个控件触发了这个窗口。</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.13.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">创建</span>
<span style="font-family: Verdana;">PanelSkin</span>
<span style="font-family: 宋体;">的子类并覆盖</span>
<span style="font-family: Verdana;">updateDisplayList</span>
<span style="font-family: 宋体;">方法，画出标记箭头。并把这个新的</span>
<span style="font-family: Verdana;">skin</span>
<span style="font-family: 宋体;">作为弹出窗口的</span>
<span style="font-family: Verdana;">borderSkin.</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.13.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">以下是基于</span>
<span style="font-family: Verdana;">2.12</span>
<span style="font-family: 宋体;">节的。要修改</span>
<span style="font-family: Verdana;">CustomPopUp</span>
<span style="font-family: 宋体;">组件。要自定义窗口边框，就要设置</span>
<span style="font-family: Verdana;">CustomPopUpd</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Verdana;">borderSkin</span>
<span style="font-family: 宋体;">样式为一个名为</span>
<span style="font-family: Verdana;">CustomPanelSkin</span>
<span style="font-family: 宋体;">的自定义类。</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:TitleWindow xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;vertical&quot;
    width=&quot;300&quot; height=&quot;50&quot;
    styleName=&quot;customPopUp&quot;
    showCloseButton=&quot;true&quot;
    close=&quot;handleClose(event)&quot;
    borderSkin=&quot;CustomPanelSkin&quot;
    initialize=&quot;initPopUp()&quot;&gt;

    &lt;mx:Style&gt;
        .customPopUp {
            header-height:2;
            padding-left:5;
            padding-right:5;
            padding-top:5;
            padding-bottom:5;
            border-color:#000000;
            border-alpha:.5;
            border-thickness-left:5;
            border-thickness-right:5;
            border-thickness-bottom:5;
            border-thickness-top:5;
            background-color:#666666;
            color:#ffffff;
        }
    &lt;/mx:Style&gt;

    &lt;mx:Text width=&quot;100%&quot; height=&quot;100%&quot; text=&quot;{message}&quot;/&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[
            import mx.managers.PopUpManager;
            import mx.events.CloseEvent;
            [Bindable]
            public var message:String;

            private function handleClose(evt:CloseEvent):void {
                PopUpManager.removePopUp(this);
            }

            private function initPopUp():void {
                this.isPopUp = false;
            }
        ]]&gt;
    &lt;/mx:Script&gt;
&lt;/mx:TitleWindow&gt;</pre>
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Verdana;">CustomPanelSkin</span>
<span style="font-family: 宋体;">类的代码如下。注意设置</span>
<span style="font-family: Verdana;">TitleWindow</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Verdana;">isPopUp</span>
<span style="font-family: 宋体;">属性为</span>
<span style="font-family: Verdana;">false</span>
<span style="font-family: 宋体;">，以避免用户能拖动弹出框。</span>
</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="java">package
{
    import flash.display.Graphics;

    import mx.skins.halo.PanelSkin;

    public class CustomPanelSkin extends PanelSkin
    {
        override protected function updateDisplayList(w:Number, h:Number):void {
            super.updateDisplayList(w,h);

            var gfx:Graphics = this.graphics;
            gfx.beginFill(this.getStyle(&quot;borderColor&quot;),
                            this.getStyle(&quot;borderAlpha&quot;));
            gfx.moveTo(this.getStyle(&quot;cornerRadius&quot;),0);
            gfx.lineTo(15,-10);
            gfx.lineTo(25,0);
        }
    }
}</pre>
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">这个简单的类扩展了</span>
<span style="font-family: Verdana;">PanelSkin</span>
<span style="font-family: 宋体;">类，</span>
<span style="font-family: Verdana;">PanelSkin</span>
<span style="font-family: 宋体;">类是</span>
<span style="font-family: Verdana;">TitleWindow</span>
<span style="font-family: 宋体;">边框的默认皮肤。在被覆盖的</span>
<span style="font-family: Verdana;">updateDisplayList</span>
<span style="font-family: 宋体;">方法里，添加了在</span>
<span style="font-family: Verdana;">CustomPopUp</span>
<span style="font-family: 宋体;">控件左上角画一个标记箭头的代码。</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><img src="../../../upload/attachment/39083/a29b4f13-f321-37b4-995d-aa7890f9d92a.jpg" height="241" alt="" width="354" />
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/243222#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 17 Sep 2008 18:11:53 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/243222</link>
        <guid>http://flex2.group.javaeye.com/group/blog/243222</guid>
      </item>
          <item>
        <title>Flex 3 cookbook翻译:  2.12 显示并定位多个弹出框</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/243155" style="color:red;">http://flex2.group.javaeye.com/group/blog/243155</a>&nbsp;
          发表时间: 2008年09月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Calibri;">2.12 </span>
<span style="font-family: 宋体;">显示并定位多个弹出框</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Calibri;">2.12.1 </span>
<span style="font-family: 宋体;">问题</span>
</p>
<p style="margin: 0in; font-family: 宋体; font-size: 10pt;">你希望用弹出窗口显示额外的消息给用户。</p>
<p style="margin: 0in; font-weight: bold; font-family: Calibri; font-size: 12pt;">Recipe
2.12.2. Solution</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Calibri;">2.12.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">基于用户交互，用</span>
<span style="font-family: Calibri;">PopUpManager</span>
<span style="font-family: 宋体;">创建一个</span>
<span style="font-family: Calibri;">TitleWindow</span>
<span style="font-family: 宋体;">组件的实例。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-family: Calibri; font-size: 12pt;">Recipe
2.12.3. Discussion</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Calibri;">2.12.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Calibri;">Flex</span>
<span style="font-family: 宋体;">框架包含了一个</span>
<span style="font-family: Calibri;">PopUpManager</span>
<span style="font-family: 宋体;">类，它包含有在</span>
<span style="font-family: Calibri;">Flex</span>
<span style="font-family: 宋体;">应用中创建，布置，移除最上层窗口的静态方法。请看如下的代码：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:Application
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;absolute&quot;&gt;

    &lt;mx:Canvas horizontalCenter=&quot;0&quot; verticalCenter=&quot;0&quot;&gt;

        &lt;mx:LinkButton label=&quot;Top&quot; x=&quot;100&quot; y=&quot;10&quot; click=&quot;showDetail(event)&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Left&quot; x=&quot;10&quot; y=&quot;100&quot; click=&quot;showDetail(event)&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Bottom&quot; x=&quot;100&quot; y=&quot;200&quot; click=&quot;showDetail(event)&quot;/&gt;
        &lt;mx:LinkButton label=&quot;Right&quot; x=&quot;200&quot; y=&quot;100&quot; click=&quot;showDetail(event)&quot;/&gt;
        &lt;mx:Canvas width=&quot;100&quot; height=&quot;100&quot; x=&quot;125&quot; y=&quot;40&quot;
            backgroundColor=&quot;#ff0000&quot; rotation=&quot;45&quot;&gt;
        &lt;/mx:Canvas&gt;
    &lt;/mx:Canvas&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[
            import mx.managers.PopUpManager;

            private const POPUP_OFFSET:int = 10;

            private function showDetail(evt:MouseEvent):void {
                // create the popup
                var popup:CustomPopUp = CustomPopUp(PopUpManager.createPopUp(this,
CustomPopUp,false));
                popup.message = &quot;This is the detail for &quot; + evt.target.label;

                // position the popup
                var pt:Point = new Point(0, 0);
                pt = evt.target.localToGlobal(pt);
                popup.x = pt.x  + POPUP_OFFSET;
                popup.y = pt.y  + evt.target.height + POPUP_OFFSET;
            }
        ]]&gt;
    &lt;/mx:Script&gt;
&lt;/mx:Application&gt;</pre>
&nbsp;
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 10pt;"><img src="../../../upload/attachment/39055/e4edecab-cc47-3b61-b622-5cb38e30f799.jpg" height="280" alt="" width="414" />
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">在这个例子里，创建了四个</span>
<span style="font-family: Calibri;">LinkButton</span>
<span style="font-family: 宋体;">控件并按绝对定位放在一个</span>
<span style="font-family: Calibri;">Canvas</span>
<span style="font-family: 宋体;">里面。当用户单击一个</span>
<span style="font-family: Calibri;">LinkButton</span>
<span style="font-family: 宋体;">，在按钮下方会显示一个弹出框，为用户呈现了详细的消息。</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">为了做到这一点，</span>
<span style="font-family: Calibri;">LinkButton</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Calibri;">click</span>
<span style="font-family: 宋体;">事件与一个</span>
<span style="font-family: Calibri;">showDetail</span>
<span style="font-family: 宋体;">方法关联起来。</span>
<span style="font-family: Calibri;">showDetail</span>
<span style="font-family: 宋体;">方法里，</span>
<span style="font-family: Calibri;">PopUpManager</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Calibri;">createPopUp</span>
<span style="font-family: 宋体;">方法创建了自定义组件</span>
<span style="font-family: Calibri;">CustomPopUp</span>
<span style="font-family: 宋体;">的一个实例。接下来弹出框的</span>
<span style="font-family: Calibri;">message</span>
<span style="font-family: 宋体;">属性被赋值为需要向用户显示的内容。</span>
</p>
<p style="margin: 0in; font-style: italic; font-size: 10pt;"><span style="font-family: 宋体;">译者注：</span>
<span style="font-family: Calibri;">PopUpManager</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Calibri;">createPopUp</span>
<span style="font-family: 宋体;">方法创建一个弹出框，并返回对该弹出框的引用。</span>
<span style="font-family: Calibri;">CustomPopUp(PopUpManager.createPopUp(this,CustomPopUp,false)</span>
<span style="font-family: Calibri;">)</span>
<span style="font-family: 宋体;">是将返回强制改变类型为</span>
<span style="font-family: Calibri;">CustomPopUp</span>
<span style="font-family: 宋体;">。所以</span>
<span style="font-family: Calibri;"><span>&nbsp; </span>
var popup:CustomPopUp =
CustomPopUp(PopUpManager.createPopUp(this,CustomPopUp,false))</span>
<span style="font-family: 宋体;">也可以改成</span>
<span style="font-family: Calibri;"> </span>
<span style="font-family: Calibri;"><span>&nbsp;</span>
var popup:CustomPopUp
=PopUpManager.createPopUp(this,CustomPopUp,false)</span>
<span style="font-family: Calibri;"> as </span>
<span style="font-family: Calibri;"><span>&nbsp;</span>
CustomPopUp</span>
<span style="font-family: 宋体;">。</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">最后，弹出框根据接收请求的</span>
<span style="font-family: Calibri;">LinkButton</span>
<span style="font-family: 宋体;">来定位。为了做到这一点，该</span>
<span style="font-family: Calibri;">LinkButton</span>
<span style="font-family: 宋体;">的左上角的本地坐标（在该</span>
<span style="font-family: Calibri;">LinkButton</span>
<span style="font-family: 宋体;">里，左上角的坐标是（</span>
<span style="font-family: Calibri;">0</span>
<span style="font-family: 宋体;">，</span>
<span style="font-family: Calibri;">0</span>
<span style="font-family: 宋体;">））被转换成全局坐标（用的是</span>
<span style="font-family: Calibri;">localToGlobal</span>
<span style="font-family: 宋体;">方法）。这是一种对所有可视对象和他们的子对象都可用的很方便的方法。</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Calibri;">CustomPopUp</span>
<span style="font-family: 宋体;">类定义如下：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:TitleWindow xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;vertical&quot;
    width=&quot;300&quot; height=&quot;50&quot;
    styleName=&quot;customPopUp&quot;
    showCloseButton=&quot;true&quot;
    close=&quot;handleClose(event)&quot;&gt;

    &lt;mx:Style&gt;
        .customPopUp {
            header-height:2;
            padding-left:5;
            padding-right:5;
            padding-top:5;
            padding-bottom:5;
            border-color:#000000;
            border-alpha:.5;
            border-thickness-left:5;
            border-thickness-right:5;
            border-thickness-bottom:5;
            border-thickness-top:5;
            background-color:#666666;
            color:#ffffff;
        }
    &lt;/mx:Style&gt;

    &lt;mx:Text width=&quot;100%&quot; height=&quot;100%&quot; text=&quot;{message}&quot;/&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[
            import mx.managers.PopUpManager;
            import mx.events.CloseEvent;
            [Bindable]
            public var message:String;

            private function handleClose(evt:CloseEvent):void {
                PopUpManager.removePopUp(this);

            }
        ]]&gt;
    &lt;/mx:Script&gt;
&lt;/mx:TitleWindow&gt;</pre>
&nbsp;
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Calibri;">CustomPopUp</span>
<span style="font-family: 宋体;">类继承自</span>
<span style="font-family: Calibri;">TitleWindow</span>
<span style="font-family: 宋体;">类，并增加了一个文本控件来显示消息。</span>
<span style="font-family: Calibri;">TitleWindow</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Calibri;">close</span>
<span style="font-family: 宋体;">事件被指派给</span>
<span style="font-family: Calibri;">handleClose</span>
<span style="font-family: 宋体;">方法，这个方法用</span>
<span style="font-family: Calibri;">PopUpManager</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Calibri;">removePopUp</span>
<span style="font-family: 宋体;">方法关闭弹出框，它还包含了定义</span>
<span style="font-family: Calibri;">CustomPopUp</span>
<span style="font-family: 宋体;">外观的</span>
<span style="font-family: Calibri;">CSS</span>
<span style="font-family: 宋体;">样式。</span>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/243155#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 17 Sep 2008 16:07:00 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/243155</link>
        <guid>http://flex2.group.javaeye.com/group/blog/243155</guid>
      </item>
          <item>
        <title>Flex 3 cookbook翻译: 2.11 使用来自Calendar控件的日期</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/242957" style="color:red;">http://flex2.group.javaeye.com/group/blog/242957</a>&nbsp;
          发表时间: 2008年09月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Verdana;">2.11 </span>
<span style="font-family: 宋体;">使用来自</span>
<span style="font-family: Verdana;">Calendar</span>
<span style="font-family: 宋体;">控件的日期</span>
</p>
<p lang="en-US" style="margin: 0in; font-weight: bold; font-family: Verdana; font-size: 12pt;">2.11.1 问题</p>
<p style="margin: 0in; font-family: 宋体; font-size: 10pt;">你想让用户从一个日历样式的控件中选择日期。</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.11.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">使用</span>
<span style="font-family: Verdana;">DataField</span>
<span style="font-family: 宋体;">控件或者</span>
<span style="font-family: Verdana;">DateChooser</span>
<span style="font-family: 宋体;">控件为用户提供便捷的日历样式的控件去选取日期。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.11.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Verdana;">Flex</span>
<span style="font-family: 宋体;">框架为日历功能提供了两个控件：</span>
<span style="font-family: Verdana;">DateField</span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;">DateChooser</span>
<span style="font-family: 宋体;">。</span>
<span style="font-family: Verdana;">DateField</span>
<span style="font-family: 宋体;">提供了一个文本输入框和一个日历图标，单击图标会打开一个日历。另一方面，</span>
<span style="font-family: Verdana;">DateChooser</span>
<span style="font-family: 宋体;">为用户一直显示一个日历。下面的例子是一个简单的旅程计时器，用到了这两种类型的控件。用户用</span>
<span style="font-family: Verdana;">DateField</span>
<span style="font-family: 宋体;">选择一个起始日期，而结束日期用</span>
<span style="font-family: Verdana;">DateChooser. </span>
<span style="font-family: 宋体;">程序通过控件的</span>
<span style="font-family: Verdana;">change</span>
<span style="font-family: 宋体;">事件，在</span>
<span style="font-family: Verdana;">update</span>
<span style="font-family: 宋体;">这个事件处理器中计算出旅行持续的时间。两个控件的</span>
<span style="font-family: Verdana;">selectedDate</span>
<span style="font-family: 宋体;">属性都会根据用户的选择返回一个日期对象。</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:Application
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;vertical&quot;&gt;

    &lt;mx:Form&gt;
        &lt;mx:FormHeading label=&quot;Trip Calculator&quot;/&gt;
        &lt;mx:FormItem label=&quot;Start Date&quot;&gt;
            &lt;mx:DateField id=&quot;startDate&quot; change=&quot;update(event)&quot;/&gt;
        &lt;/mx:FormItem&gt;
        &lt;mx:FormItem label=&quot;End Date&quot;&gt;
            &lt;mx:DateChooser id=&quot;endDate&quot; change=&quot;update(event)&quot;/&gt;
        &lt;/mx:FormItem&gt;
        &lt;mx:FormItem label=&quot;Trip Duration (days)&quot;&gt;
            &lt;mx:Label id=&quot;display&quot;/&gt;
        &lt;/mx:FormItem&gt;
    &lt;/mx:Form&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[
            import mx.events.CalendarLayoutChangeEvent;

            private static const MILLISECONDS:int = 1000;
            private static const SECONDS:int = 60;
            private static const MINUTES:int = 60;
            private static const HOURS:int = 24;


            private function update(evt:CalendarLayoutChangeEvent):void {
                try {
                    var diff:Number = endDate.selectedDate.getTime() -
startDate.selectedDate.getTime();
                    // convert the millisecond into days
                    var days:int = int(diff/(MILLISECONDS*SECONDS*MINUTES*HOURS));
                    display.text = days.toString();
                }
                catch(ex:Error) {

                }
            }

        ]]&gt;
    &lt;/mx:Script&gt;
&lt;/mx:Application&gt;</pre>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;"><img src="../../../upload/attachment/38951/f9d626c2-a59f-311e-be61-9e546643b980.jpg" height="299" alt="" width="342" />
</p>
<p>&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">当执行日期计算时，用</span>
<span style="font-family: Verdana;">Date</span>
<span style="font-family: 宋体;">对象的</span>
<span style="font-family: Verdana;">getTime</span>
<span style="font-family: 宋体;">方法是很重要的，以便让跨年能正确地被分解。</span>
<span style="font-family: Verdana;">getTimer</span>
<span style="font-family: 宋体;">方法返回从</span>
<span style="font-family: Verdana;">1970.1.1</span>
<span style="font-family: 宋体;">以来的毫秒数。</span>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/242957#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 17 Sep 2008 01:58:09 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/242957</link>
        <guid>http://flex2.group.javaeye.com/group/blog/242957</guid>
      </item>
          <item>
        <title>Flex 3 cookbook翻译: 2.10 在应用中显示一个Alert窗口</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/242955" style="color:red;">http://flex2.group.javaeye.com/group/blog/242955</a>&nbsp;
          发表时间: 2008年09月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Verdana;">2.10 </span>
<span style="font-family: 宋体;">在应用中显示一个</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">窗口</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.10.1 </span>
<span style="font-family: 宋体;">问题</span>
</p>
<p style="margin: 0in; font-family: 宋体; font-size: 10pt;">你希望显示一条对话信息，并根据用户选择呈现不同的内容。</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.10.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">用</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">控件显示一条消息给用户。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.10.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">控件提供了一个对话框，里面有按钮让用户对对话框里面显示的信息作出反馈。</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">控件不能用</span>
<span style="font-family: Verdana;">MXML</span>
<span style="font-family: 宋体;">创建，你必须用</span>
<span style="font-family: Verdana;">ActionScript</span>
<span style="font-family: 宋体;">。例如：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:Application
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;vertical&quot;&gt;

    &lt;mx:Button id=&quot;btn&quot; click=&quot;showAlert(event)&quot; label=&quot;Alert&quot;/&gt;

    &lt;mx:Label id=&quot;lbl&quot;/&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[
            import mx.events.CloseEvent;
            import mx.controls.Alert;
            import mx.events.MenuEvent;

            private function showAlert(evt:MouseEvent):void {
                var alert:Alert = Alert.show(&quot;Button was clicked&quot;,&quot;Alert Window
Title&quot;,Alert.OK|Alert.CANCEL|Alert.NO|Alert.YES,this,onAlertClose);
            }

            private function onAlertClose(evt:CloseEvent):void {
                switch(evt.detail) {
                    case Alert.OK:
                        lbl.text = &quot;OK Clicked&quot;;
                        break;
                    case Alert.CANCEL:
                        lbl.text = &quot;CANCEL Clicked&quot;;
                        break;
                    case Alert.NO:
                        lbl.text = &quot;NO Clicked&quot;;
                        break;
                    case Alert.YES:
                        lbl.text = &quot;YES Clicked&quot;;
                        break;
                }
            }
        ]]&gt;
    &lt;/mx:Script&gt;
&lt;/mx:Application&gt;</pre>
<p>
&nbsp;
<img src="../../../upload/attachment/38949/4ca704a0-3436-3406-b8ee-4b59fa272eb9.jpg" height="122" alt="" width="368" />
</p>
<p>&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">当用户单击</span>
<span style="font-family: Verdana;">btn</span>
<span style="font-family: 宋体;">按钮，示例代码用</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">类里的静态方法</span>
<span style="font-family: Verdana;">show</span>
<span style="font-family: 宋体;">创建一个</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">控件。</span>
<span style="font-family: Verdana;">show</span>
<span style="font-family: 宋体;">方法接收下列的参数来设置</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">控件：</span>
</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">text</p>
<p style="margin: 0in 0in 0in 0.75in; font-family: 宋体; font-size: 10pt;">显示给用户的消息。</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">title</p>
<p style="margin: 0in 0in 0in 0.75in; font-size: 10pt;"><span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">对话框的标题。</span>
</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">flags</p>
<p style="margin: 0in 0in 0in 0.75in; font-size: 10pt;"><span style="font-family: 宋体;">显示在对话框里的按钮。有效值是</span>
<span style="font-family: Verdana;">Alert.OK, Alert.CANCEL, Alert.NO, </span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;">Alert.YES</span>
<span style="font-family: 宋体;">。用按位</span>
<span style="font-family: Verdana;">OR</span>
<span style="font-family: 宋体;">操作符，可以显示多个按钮，例如</span>
<span style="font-family: Verdana;">Alert.OK
| Alert.CANCEL</span>
<span style="font-family: 宋体;">。</span>
</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">parent</p>
<p style="margin: 0in 0in 0in 0.75in; font-size: 10pt;"><span style="font-family: 宋体;">确定</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">对话框居中显示在哪个显示对象里面。</span>
</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">closeHandler</p>
<p style="margin: 0in 0in 0in 0.75in; font-size: 10pt;"><span style="font-family: 宋体;">当在</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">控件上的任何按钮被单击时调用的事件处理函数。</span>
</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">iconClass</p>
<p style="margin: 0in 0in 0in 0.75in; font-size: 10pt;"><span style="font-family: 宋体;">在</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">里，位于显示信息左边的图标资源类。</span>
</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">defaultButtonFlag</p>
<p style="margin: 0in 0in 0in 0.75in; font-size: 10pt;"><span style="font-family: 宋体;">确定在</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">里的默认按钮。按下</span>
<span style="font-family: Verdana;">Enter</span>
<span style="font-family: 宋体;">键会触发默认按钮。可用的值有</span>
<span style="font-family: Verdana;">Alert.OK, Alert.CANCEL, Alert.NO, Alert.YES.</span>
</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Verdana;">onAlertClose</span>
<span style="font-family: 宋体;">方法被设置为</span>
<span style="font-family: Verdana;">Alert</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Verdana;">closeHandle</span>
<span style="font-family: 宋体;">事件处理器。这个方法接收一个</span>
<span style="font-family: Verdana;">CloseEvent</span>
<span style="font-family: 宋体;">对象作为参数，并使用</span>
<span style="font-family: Verdana;">CloseEvent</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Verdana;">detail</span>
<span style="font-family: 宋体;">属性来确定哪一个按钮被单击了。</span>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/242955#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 17 Sep 2008 01:23:44 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/242955</link>
        <guid>http://flex2.group.javaeye.com/group/blog/242955</guid>
      </item>
          <item>
        <title>Flex 3 cookbook:  2.9 为菜单控件创建事件处理器</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/242950" style="color:red;">http://flex2.group.javaeye.com/group/blog/242950</a>&nbsp;
          发表时间: 2008年09月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Verdana;">2.9 </span>
<span style="font-family: 宋体;">为菜单控件创建事件处理器</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.9.1 </span>
<span style="font-family: 宋体;">问题</span>
</p>
<p style="margin: 0in; font-family: 宋体; font-size: 10pt;">你需要让用户与菜单的交互起作用。</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.9.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">为</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">控件的</span>
<span style="font-family: Verdana;">itemClick</span>
<span style="font-family: 宋体;">事件添加侦听器。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.9.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">为了响应菜单栏交互，为</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">控件的</span>
<span style="font-family: Verdana;">itemClick</span>
<span style="font-family: 宋体;">事件指派一个侦听器函数</span>
<span style="font-family: Verdana;">handleMenuClick</span>
<span style="font-family: 宋体;">。无论何时，只要用户选择了一个菜单项，</span>
<span style="font-family: Verdana;">itemClick</span>
<span style="font-family: 宋体;">事件会被触发。一个</span>
<span style="font-family: Verdana;">MenuEvent</span>
<span style="font-family: 宋体;">对象会被侦听器函数接收到，作为它的参数。</span>
<span style="font-family: Verdana;">MenuEvent</span>
<span style="font-family: 宋体;">对象包含了此事件被触发处的菜单项的信息。</span>
<span style="font-weight: bold; font-family: Verdana;">MenuEvent</span>
<span style="font-weight: bold; font-family: 宋体;">的</span>
<span style="font-weight: bold; font-family: Verdana;">item</span>
<span style="font-weight: bold; font-family: 宋体;">属性包含了对</span>
<span style="font-weight: bold; font-family: Verdana;">dataProvider</span>
<span style="font-weight: bold; font-family: 宋体;">里的某项的引用</span>
<span style="font-family: 宋体;">，该项是与触发该事件的菜单项相关联的。这就是你会用到的代码：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:Application
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;vertical&quot;&gt;

    &lt;mx:MenuBar
        labelField=&quot;@label&quot;
        itemClick=&quot;handleMenuClick(event)&quot;&gt;
        &lt;mx:XMLList&gt;
            &lt;menuitem label=&quot;File&quot;&gt;
                &lt;menuitem label=&quot;New&quot;/&gt;
                &lt;menuitem label=&quot;Open&quot;/&gt;
                &lt;menuitem label=&quot;Close&quot; enabled=&quot;false&quot;/&gt;
            &lt;/menuitem&gt;
            &lt;menuitem label=&quot;Edit&quot;/&gt;
            &lt;menuitem label=&quot;Source&quot;/&gt;
            &lt;menuitem label=&quot;View&quot;&gt;
                &lt;menuitem label=&quot;50%&quot;
                    type=&quot;radio&quot; groupName=&quot;one&quot;/&gt;
                &lt;menuitem label=&quot;100%&quot;
                    type=&quot;radio&quot; groupName=&quot;one&quot;
                    selected=&quot;true&quot;/&gt;
                &lt;menuitem label=&quot;150%&quot;
                    type=&quot;radio&quot; groupName=&quot;one&quot;/&gt;
            &lt;/menuitem&gt;
        &lt;/mx:XMLList&gt;
    &lt;/mx:MenuBar&gt;

    &lt;mx:Label id=&quot;disp0_lbl&quot;/&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[
            import mx.events.MenuEvent;

            private function handleMenuClick(evt:MenuEvent):void {
                this.disp0_lbl.text = evt.item.@label + &quot; was selected&quot;;
            }
        ]]&gt;
    &lt;/mx:Script&gt;
&lt;/mx:Application&gt;</pre>
<p>&nbsp;

<span style="font-family: 宋体;">注意：由于</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">是</span>
<span style="font-family: Verdana;">E4X</span>
<span style="font-family: 宋体;">格式的，这个例子使用了</span>
<span style="font-family: Verdana;">E4X</span>
<span style="font-family: 宋体;">记号&ldquo;</span>
<span style="font-family: Verdana;">@label</span>
<span style="font-family: 宋体;">&rdquo;来搜寻</span>
<span style="font-family: Verdana;">label</span>
<span style="font-family: 宋体;">属性。</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">控件也支持别的事件类型，例如</span>
<span style="font-family: Verdana;">change, itemRollOut, itemRollOver, menuHide, </span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;"> menuShow</span>
<span style="font-family: 宋体;">。</span>
</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/242950#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 17 Sep 2008 00:38:23 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/242950</link>
        <guid>http://flex2.group.javaeye.com/group/blog/242950</guid>
      </item>
          <item>
        <title>Flex 3 cookbook:  2.8 动态填充菜单</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/242944" style="color:red;">http://flex2.group.javaeye.com/group/blog/242944</a>&nbsp;
          发表时间: 2008年09月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Verdana;">2.8 </span>
<span style="font-family: 宋体;">动态填充菜单</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.8.1 </span>
<span style="font-family: 宋体;">问题</span>
</p>
<p style="margin: 0in; font-family: 宋体; font-size: 10pt;">你想填充并动态改变菜单</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.8.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">用</span>
<span style="font-family: Verdana;">ActionScript</span>
<span style="font-family: 宋体;">分配一个</span>
<span style="font-family: Verdana;">ArrayCollection</span>
<span style="font-family: 宋体;">或</span>
<span style="font-family: Verdana;">XMLListCollection</span>
<span style="font-family: 宋体;">这样的</span>
<span style="font-family: Verdana;">Collection</span>
<span style="font-family: 宋体;">对象给</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">控件的</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">属性。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.8.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">在</span>
<span style="font-family: Verdana;">Flex 3</span>
<span style="font-family: 宋体;">里的</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">控件支持在运行时动态生成菜单项。下面的代码生成一个有</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">控件的应用，当应用被初始化时，这个</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">被一个</span>
<span style="font-family: Verdana;">ArrayCollecton</span>
<span style="font-family: 宋体;">对象填充。</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:Application
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;vertical&quot;
    creationComplete=&quot;initApp(event)&quot;&gt;

    &lt;mx:MenuBar id=&quot;menu&quot; dataProvider=&quot;{menu_dp}&quot;/&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;

            [Bindable]
            private var menu_dp:ArrayCollection;

            private function initApp(evt:FlexEvent):void {
                var temp:Array = new Array();

                var subNodes:ArrayCollection = new ArrayCollection([{label:&quot;New&quot;},
                                                                      {label:&quot;Open&quot;},
                                                                      {label:&quot;Close&quot;,enabled:false}]);
                temp.push({label:&quot;File&quot;,children:subNodes});
                temp.push({label:&quot;Edit&quot;});
                temp.push({label:&quot;Source&quot;});

                subNodes = new ArrayCollection([{label:&quot;50%&quot;, type:&quot;radio&quot;,roupName:&quot;one&quot;},
                                           {label:&quot;100%&quot;, type:&quot;radio&quot;, groupName:&quot;one&quot;,selected:true},
                                           {label:&quot;150%&quot;, type:&quot;radio&quot;, groupName:&quot;one&quot;}]);
                temp.push({label:&quot;View&quot;,children:subNodes});
                menu_dp = new ArrayCollection(temp);
            }
        ]]&gt;
    &lt;/mx:Script&gt;
&lt;/mx:Application&gt;</pre>
&nbsp;
<p><img src="../../../upload/attachment/38946/72eaa0bd-a908-38f2-92b1-7692d384ca54.jpg" height="212" alt="" width="323" />
</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">上述代码用</span>
<span style="font-family: Verdana;">binding</span>
<span style="font-family: 宋体;">绑定一个名为</span>
<span style="font-family: Verdana;">menu_dp</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Verdana;">ArrayCollecton</span>
<span style="font-family: 宋体;">对象到</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">组件的</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">属性。在该应用的</span>
<span style="font-family: Verdana;">creationComplete</span>
<span style="font-family: 宋体;">事件发生时，</span>
<span style="font-family: Verdana;">menu_dp</span>
<span style="font-family: 宋体;">被初始化，并填充菜单项。就像</span>
<span style="font-family: Verdana;">Flex</span>
<span style="font-family: 宋体;">里的其它数据驱动组件一样，使用类似</span>
<span style="font-family: Verdana;">ArrayCollection</span>
<span style="font-family: 宋体;">或</span>
<span style="font-family: Verdana;">XMLListCollection</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Verdana;">Collection</span>
<span style="font-family: 宋体;">组件，可以确保基础数据的任何变化都会导致控件的显示作相应的刷新。</span>
</p>
<p style="margin: 0in; font-style: italic; font-size: 10pt;"><span style="font-family: 宋体;">译者注</span>
<span style="font-family: Verdana;">:</span>
<span style="font-family: 宋体;">请将</span>
<span style="font-family: Verdana;">subNodes</span>
<span style="font-family: 宋体;">的第二项的</span>
<span style="font-family: Verdana;">selected</span>
<span style="font-family: 宋体;">属性改成</span>
<span style="font-family: Verdana;">toggled</span>
<span style="font-family: 宋体;">。如</span>
<span style="font-family: Verdana;">2.7</span>
<span style="font-family: 宋体;">节所述，</span>
<span style="font-family: Verdana;">toggled</span>
<span style="font-family: 宋体;">属性才是控制</span>
<span style="font-family: Verdana;">radio</span>
<span style="font-family: 宋体;">类型的菜单项是否被选中的。</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Verdana;">Collection</span>
<span style="font-family: 宋体;">组件提供了便利的方法编辑，添加，删除菜单项。为了说明这一点，这个例子在</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">下添加了一个简单的</span>
<span style="font-family: Verdana;">Form</span>
<span style="font-family: 宋体;">组件，让你可以根据他们在</span>
<span style="font-family: Verdana;">ArrayCollecton</span>
<span style="font-family: 宋体;">里的索引编辑菜单。</span>
</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;"><span>&nbsp;&nbsp;&nbsp; </span>
</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;mx:Form&gt;
        &lt;mx:FormHeading label=&quot;Menu Editor&quot;/&gt;
        &lt;mx:FormItem label=&quot;Menu Index&quot;&gt;
            &lt;mx:TextInput id=&quot;menuIdx&quot; restrict=&quot;0-9&quot; text=&quot;0&quot; width=&quot;20&quot;/&gt;
        &lt;/mx:FormItem&gt;
        &lt;mx:FormItem label=&quot;Sub-Menu Index&quot;&gt;
            &lt;mx:TextInput id=&quot;subMenuIdx&quot; restrict=&quot;0-9&quot; width=&quot;20&quot;/&gt;
        &lt;/mx:FormItem&gt;
        &lt;mx:FormItem label=&quot;Menu Label&quot;&gt;
            &lt;mx:TextInput id=&quot;label_ti&quot;/&gt;
        &lt;/mx:FormItem&gt;
        &lt;mx:FormItem&gt;
            &lt;mx:Button label=&quot;Edit&quot; click=&quot;editMenu()&quot;/&gt;
        &lt;/mx:FormItem&gt;
    &lt;/mx:Form&gt;</pre>
&nbsp;
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">这是一个很基础的</span>
<span style="font-family: Verdana;">Form</span>
<span style="font-family: 宋体;">，它的</span>
<span style="font-family: Verdana;">input</span>
<span style="font-family: 宋体;">控件可以让你指定数组索引，依此来获取一个特定的菜单项。在</span>
<span style="font-family: Verdana;">menuIdx</span>
<span style="font-family: 宋体;">文本框里输入</span>
<span style="font-family: Verdana;">0</span>
<span style="font-family: 宋体;">，并保持</span>
<span style="font-family: Verdana;">subMenuIdx</span>
<span style="font-family: 宋体;">为空，则指定</span>
<span style="font-family: Verdana;">File</span>
<span style="font-family: 宋体;">菜单的顶级。在</span>
<span style="font-family: Verdana;">menuIdx</span>
<span style="font-family: 宋体;">文本框里输入</span>
<span style="font-family: Verdana;">0</span>
<span style="font-family: 宋体;">，在</span>
<span style="font-family: Verdana;">subMenuIdx</span>
<span style="font-family: 宋体;">里输入</span>
<span style="font-family: Verdana;">0</span>
<span style="font-family: 宋体;">，则指定</span>
<span style="font-family: Verdana;">New</span>
<span style="font-family: 宋体;">子菜单项。</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">当用户单击</span>
<span style="font-family: Verdana;">Edit</span>
<span style="font-family: 宋体;">按钮，</span>
<span style="font-family: Verdana;">editMenu</span>
<span style="font-family: 宋体;">方法就被调用，这个方法用指定的索引来获取某个菜单项的引用并改变它的标签。请看如下代码：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">private function editMenu():void {
    var itemToEdit:Object;
    try {
        itemToEdit = menu_dp.getItemAt(int(menuIdx.text));
        if(subMenuIdx.text) {
            itemToEdit = itemToEdit.children.getItemAt(int(subMenuIdx.text));
        }
        itemToEdit.label = label_ti.text;
        menu_dp.itemUpdated(itemToEdit);
    }
    catch(ex:Error){
        trace(&quot;could not retrieve menu item&quot;);
    }
}</pre>
&nbsp;
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: Verdana;">editMenu</span>
<span style="font-family: 宋体;">里的代码查找输入</span>
<span style="font-family: Verdana;">menuIdx</span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;">subMenuIdx</span>
<span style="font-family: 宋体;">里的值，依此去寻找一个特定的菜单项，然后用</span>
<span style="font-family: Verdana;">label_ti</span>
<span style="font-family: 宋体;">里的值去刷新那个菜单项显示的内容。注意：为了改变菜单的显示，与</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">关联的</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">被改变了，然后用</span>
<span style="font-family: Verdana;">ArrayCollecton</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Verdana;">itemUpdated</span>
<span style="font-family: 宋体;">方法来请求刷新菜单显示。在类似这个例子的嵌套数据结构中，调用</span>
<span style="font-family: Verdana;">itemUpdated</span>
<span style="font-family: 宋体;">来请求显示刷新很重要。否则，基础数据改变了，但是显示仍然是旧的内容。示例代码中用了一个</span>
<span style="font-family: Verdana;">try&hellip;catch</span>
<span style="font-family: 宋体;">块来为数组界限做一些基础的错误处理。</span>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/242944#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 17 Sep 2008 00:05:57 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/242944</link>
        <guid>http://flex2.group.javaeye.com/group/blog/242944</guid>
      </item>
          <item>
        <title>Flex 3 cookbook翻译: 2.7 为菜单提供数据</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/242928" style="color:red;">http://flex2.group.javaeye.com/group/blog/242928</a>&nbsp;
          发表时间: 2008年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Verdana;">2.7 </span>
<span style="font-family: 宋体;">为菜单提供数据</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.7.1 </span>
<span style="font-family: 宋体;">问题</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">用</span>
<span style="font-family: Verdana;">data provider</span>
<span style="font-family: 宋体;">生成菜单栏</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.7.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">用</span>
<span style="font-family: Verdana;">MXML</span>
<span style="font-family: 宋体;">为</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">控件的</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">属性指定一个</span>
<span style="font-family: Verdana;">ArrayCollecton</span>
<span style="font-family: 宋体;">，</span>
<span style="font-family: Verdana;">XMLListCollection</span>
<span style="font-family: 宋体;">之类的</span>
<span style="font-family: Verdana;">Collection</span>
<span style="font-family: 宋体;">对象。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-family: Verdana; font-size: 12pt;">Recipe
2.7.3. Discussion</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.7.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p><span style="font-family: 宋体;">用数据生成一个</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">控件最简单的方式是用</span>
<span style="font-family: Verdana;">MXML</span>
<span style="font-family: 宋体;">在控件内部生成一个</span>
<span style="font-family: Verdana;">XMLList</span>
<span style="font-family: 宋体;">类型的实例。</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:Application
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;horizontal&quot;&gt;
    &lt;mx:MenuBar labelField=&quot;@label&quot;&gt;
        &lt;mx:XMLList&gt;
            &lt;menuitem label=&quot;File&quot;&gt;
                &lt;menuitem label=&quot;New&quot;/&gt;
                &lt;menuitem label=&quot;Open&quot;/&gt;
                &lt;menuitem label=&quot;Close&quot; enabled=&quot;false&quot;/&gt;
            &lt;/menuitem&gt;
            &lt;menuitem label=&quot;Edit&quot;/&gt;
            &lt;menuitem label=&quot;Source&quot;/&gt;
            &lt;menuitem label=&quot;View&quot;&gt;
                &lt;menuitem label=&quot;50%&quot;
                    type=&quot;radio&quot; groupName=&quot;one&quot;/&gt;
                &lt;menuitem label=&quot;100%&quot;
                    type=&quot;radio&quot; groupName=&quot;one&quot;
                    selected=&quot;true&quot;/&gt;
                &lt;menuitem label=&quot;150%&quot;
                    type=&quot;radio&quot; groupName=&quot;one&quot;/&gt;
            &lt;/menuitem&gt;
        &lt;/mx:XMLList&gt;
    &lt;/mx:MenuBar&gt;
&lt;/mx:Application&gt;</pre>
&nbsp;
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">因为</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">属性是</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">控件的默认属性，</span>
<span style="font-family: Verdana;">XMLList</span>
<span style="font-family: 宋体;">对象可以被指派作为</span>
<span style="font-family: Verdana;">&lt;mx:MenuBar&gt;</span>
<span style="font-family: 宋体;">标签的直接子对象。</span>
<span style="font-family: Verdana;">XMLList</span>
<span style="font-family: 宋体;">中的顶级节点相当于</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">上的按钮。这些节点可以取任何名字&mdash;&mdash;比如，不用</span>
<span style="font-family: Verdana;">menuitem</span>
<span style="font-family: 宋体;">也能作为子节点。不过，节点的属性有特别的意思，并影响显示的效果和菜单交互。这些属性列表如下：</span>
</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">enabled</p>
<p style="margin: 0in 0in 0in 0.75in; font-family: 宋体; font-size: 10pt;">指定用户时候能选择这个菜单项。</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">groupName</p>
<p style="margin: 0in 0in 0in 0.75in; font-size: 10pt;"><span style="font-family: 宋体;">当类型是</span>
<span style="font-family: Verdana;">radio</span>
<span style="font-family: 宋体;">时适用。具有相同</span>
<span style="font-family: Verdana;">groupName</span>
<span style="font-family: 宋体;">的菜单项作为一组</span>
<span style="font-family: Verdana;">radio</span>
<span style="font-family: 宋体;">。</span>
</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">icon</p>
<p style="margin: 0in 0in 0in 0.75in; font-family: 宋体; font-size: 10pt;">指定一个图片资源的类标识符。</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">label</p>
<p style="margin: 0in 0in 0in 0.75in; font-size: 10pt;"><span style="font-family: 宋体;">指定菜单项显示的内容。注意当</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">是</span>
<span style="font-family: Verdana;">E4X</span>
<span style="font-family: 宋体;">格式，就像前面的例子，</span>
<span style="font-family: Verdana;">MenuBar</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Verdana;">labelField</span>
<span style="font-family: 宋体;">属性必须明确指定，即使在</span>
<span style="font-family: Verdana;">XMLList</span>
<span style="font-family: 宋体;">里有</span>
<span style="font-family: Verdana;">label</span>
<span style="font-family: 宋体;">属性。</span>
</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">toggled</p>
<p style="margin: 0in 0in 0in 0.75in; font-size: 10pt;"><span style="font-family: 宋体;">指定</span>
<span style="font-family: Verdana;">check</span>
<span style="font-family: 宋体;">或</span>
<span style="font-family: Verdana;">radio</span>
<span style="font-family: 宋体;">类型的菜单项是否是选中状态。</span>
</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: Verdana; font-size: 10pt;">type</p>
<p style="margin: 0in 0in 0in 0.75in; font-size: 10pt;"><span style="font-family: 宋体;">指定菜单的类型（三种选项）：</span>
<span style="font-family: Verdana;">check, radio, </span>
<span style="font-family: 宋体;">或</span>
<span style="font-family: Verdana;">separator</span>
<span style="font-family: 宋体;">。其中</span>
<span style="font-family: Verdana;">separator</span>
<span style="font-family: 宋体;">是默认的，也就是不需要指定。</span>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/242928#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 16 Sep 2008 22:26:36 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/242928</link>
        <guid>http://flex2.group.javaeye.com/group/blog/242928</guid>
      </item>
          <item>
        <title>Flex 3 cookbook翻译:  2.6 设置控件的labelFunction</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/242914" style="color:red;">http://flex2.group.javaeye.com/group/blog/242914</a>&nbsp;
          发表时间: 2008年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Verdana;">2.6 </span>
<span style="font-family: 宋体;">设置</span>
<span style="font-family: 宋体;">控件的</span>
<span style="font-family: Verdana;">labelFunction</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.6.1 </span>
<span style="font-family: 宋体;">问题</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">你需要综合</span>
<span style="font-family: 宋体;">data provider</span>
<span style="font-family: 宋体;">中的不同部分来定制</span>
<span style="font-family: Verdana;">comboBox</span>
<span style="font-family: 宋体;">组件里面的标签。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.6.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">用</span>
<span style="font-family: Verdana;">comboBox</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Verdana;">labelFunction</span>
<span style="font-family: 宋体;">属性来指派一个自定义的函数，这个函数定义了显示的标签。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.6.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">默认情况下，</span>
<span style="font-family: Verdana;">Flex</span>
<span style="font-family: 宋体;">里的列表组件是在</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">的项目里寻找</span>
<span style="font-family: Verdana;">label</span>
<span style="font-family: 宋体;">属性作为显示的内容。可是，在某些情况下，</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">没有</span>
<span style="font-family: Verdana;">label</span>
<span style="font-family: 宋体;">属性，或者你需要显示的内容是从</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">的项目里的多个部分组合起来的。</span>
<span style="font-family: Verdana;">labelFunction</span>
<span style="font-family: 宋体;">属性允许为</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">的项引用一个用户定义的方法，并为每项返回一个显示标签。</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">在如下的例子中，</span>
<span style="font-family: Verdana;">comboBox</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: Verdana;">labelFunction</span>
<span style="font-family: 宋体;">属性包含了对</span>
<span style="font-family: Verdana;">getFullName</span>
<span style="font-family: 宋体;">函数的引用，那个函数将</span>
<span style="font-family: Verdana;">dataProvider</span>
<span style="font-family: 宋体;">的每项里的</span>
<span style="font-family: Verdana;">fName</span>
<span style="font-family: 宋体;">和</span>
<span style="font-family: Verdana;">lName</span>
<span style="font-family: 宋体;">部分连接起来并返回这个全名字符串。请看：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;mx:Application
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;horizontal&quot;&gt;

    &lt;mx:ComboBox dataProvider=&quot;{myDP}&quot; labelFunction=&quot;getFullName&quot;/&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[
            import mx.collections.ArrayCollection;

            [Bindable]
            private var myDP:ArrayCollection = new ArrayCollection([{id:1,fName:
&quot;Lucky&quot;, lName:&quot;Luke&quot;}, {id:2, fName:
&quot;Bart&quot;, lName:&quot;Simpson&quot;}]);

            private function getFullName(item:Object):String{
                return item.fName + &quot; &quot; + item.lName;
            }

        ]]&gt;
    &lt;/mx:Script&gt;
&lt;/mx:Application&gt;</pre>
&nbsp;
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/242914#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 16 Sep 2008 21:30:54 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/242914</link>
        <guid>http://flex2.group.javaeye.com/group/blog/242914</guid>
      </item>
          <item>
        <title>Flex 3 cookbook翻译: 2.5 设置组件的tab键顺序</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/242850" style="color:red;">http://flex2.group.javaeye.com/group/blog/242850</a>&nbsp;
          发表时间: 2008年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 16pt;"><span style="font-family: Verdana;">2.5 </span>
<span style="font-family: 宋体;">设置组件的</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键顺序</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.5.1 </span>
<span style="font-family: 宋体;">问题</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">你需要改变在</span>
<span style="font-family: Verdana;">Flex</span>
<span style="font-family: 宋体;">应用里组件的默认</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键顺序</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.5.2 </span>
<span style="font-family: 宋体;">解答</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">用</span>
<span style="font-family: Verdana;">Flex</span>
<span style="font-family: 宋体;">组件的</span>
<span style="font-family: Verdana;">tabIndex</span>
<span style="font-family: 宋体;">属性设定自定义的</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键顺序。</span>
</p>
<p style="margin: 0in; font-weight: bold; font-size: 12pt;"><span style="font-family: Verdana;">2.5.3 </span>
<span style="font-family: 宋体;">讨论</span>
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">默认地，所有能接收</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键的</span>
<span style="font-family: Verdana;">Flex</span>
<span style="font-family: 宋体;">组件都有</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键顺序，这个顺序基于他们在屏幕上的布局。要改变默认的顺序并明确地指定一个自定义的</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键顺序，用这些组件的</span>
<span style="font-family: Verdana;">tabIndex</span>
<span style="font-family: 宋体;">属性就可以了。如下的</span>
<span style="font-family: Verdana;">TextInput</span>
<span style="font-family: 宋体;">组件的</span>
<span style="font-family: Verdana;">tabIndex</span>
<span style="font-family: 宋体;">属性被设置为从左到右的顺序：</span>
</p>
<pre name="code" class="java">&lt;mx:Application
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    layout=&quot;horizontal&quot;&gt;

    &lt;mx:VBox&gt;
        &lt;mx:Label text=&quot;First Name : &quot;/&gt;
        &lt;mx:TextInput tabIndex=&quot;1&quot;/&gt;
        &lt;mx:Label text=&quot;Home # : &quot;/&gt;
        &lt;mx:TextInput tabIndex=&quot;3&quot;/&gt;
    &lt;/mx:VBox&gt;
    &lt;mx:VBox&gt;
        &lt;mx:Label text=&quot;Last Name : &quot;/&gt;
        &lt;mx:TextInput tabIndex=&quot;2&quot;/&gt;
        &lt;mx:Label text=&quot;Work # : &quot;/&gt;
        &lt;mx:TextInput tabIndex=&quot;4&quot;
            text=&quot;978-111-2345&quot;/&gt;
        &lt;mx:Button label=&quot;Submit&quot; tabIndex=&quot;5&quot;/&gt;
    &lt;/mx:VBox&gt;
&lt;/mx:Application&gt;</pre>
<p style="margin: 0in; font-family: Verdana; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><img src="../../../upload/attachment/38915/b6327722-f325-369b-a791-35d9b0719815.jpg" height="146" alt="" width="362" />
</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体;">如果</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">顺序没有指定，默认的顺序是基于布局的，是从上到下。</span>
<span style="font-family: Verdana;">tabIndex</span>
<span style="font-family: 宋体;">属性也可以在</span>
<span style="font-family: Verdana;">ActionScript</span>
<span style="font-family: 宋体;">程序设定。如果在运行时有动态生成的子组件，并且需要去控制</span>
<span style="font-family: Verdana;">tab</span>
<span style="font-family: 宋体;">键顺序时，这一点很有用。</span>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/242850#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 16 Sep 2008 18:34:41 +0800</pubDate>
        <link>http://flex2.group.javaeye.com/group/blog/242850</link>
        <guid>http://flex2.group.javaeye.com/group/blog/242850</guid>
      </item>
          <item>
        <title>检测是否鼠标已经离开了Flash影片</title>
        <author>ycy303</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyun.javaeye.com">ycy303</a>&nbsp;
                    链接：<a href="http://flex2.group.javaeye.com/group/blog/242844" style="color:red;">http://flex2.group.javaeye.com/group/blog/242844</a>&nbsp;
          发表时间: 2008年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p style="margin: 0in; font-size: 10pt; color: black;"><span style="font-family: 宋体;">以前版本的</span>
<span style="font-family: Verdana;">ActionScript</span>
<span style="font-family: 宋体;">有个问题，就是当用户的鼠标没有在</span>
<span style="font-family: Verdana;">Flash</span>
<span style="font-family: 宋体;">影片上时，你不能得到任何通知。这造成了如下的困难，用户还在与</span>
<span style="font-family: Verdana;">Flash</span>
<span style="font-family: 宋体;">影片交互，还是已经放弃并转移到别的东西上去了。当我们有一个自定义的光标的时候这个问题特别突出，当真正的光标已经移到别的地方的时候，自定义的光标仍然显示在</span>
<span style="font-family: Verdana;">Flash</span>
<span style="font-family: 宋体;">影片中。</span>
</p>
<p style="margin: 0in; font-family: Arial; font-size: 10pt; color: black;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><span style="font-family: 宋体; color: black;">用</span>
<span style="font-family: Verdana; color: black;">stage</span>
<span style="font-family: 宋体; color: black;">的</span>
<span style="font-family: Arial; color: #003399;">MOUSE_LEAVE</span>
<span style="font-family: 宋体; color: #003399;">事件，</span>
<span style="font-family: Arial; color: black;">ActionScript3</span>
<span style="font-family: 宋体; color: black;">现在能让你检测到鼠标离开</span>
<span style="font-family: Arial; color: black;">Flash</span>
<span style="font-family: 宋体; color: black;">影片。请在如下影片上移动鼠标。</span>
</p>
<p style="margin: 0in; font-size: 10pt;">
<object height="300" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="400">
<param name="src" value="http://www.kirupa.com/developer/flashcs3/swf/mouseLeave.swf" />
<embed src="http://www.kirupa.com/developer/flashcs3/swf/mouseLeave.swf" type="application/x-shockwave-flash" height="300" width="400"></embed>
</object>
</p>
<p style="margin: 0in; font-size: 10pt;">详情请查看：<a href="http://www.kirupa.com/developer/flashcs3/detecting_when_mouse_leaves_movie.htm">http://www.kirupa.com/developer/flashcs3/detecting_when_mouse_leaves_movie.htm</a>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://flex2.group.javaeye.com/group/blog/242844#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++