开发GUI部分 在Eclipse中打开Flex perspective 并创建一个包含Listing 3-7文件的新项目(例如, Portfolio_RCP),然后会编译并生成一个叫做portfolio.swf的文件. 为部署方便,把该项目的output directory 设置为 Tomcat的 \ROOT\portfolio. 主文件portfolio.mxml (见 Listing 3) 将屏幕设为一个(在部分区域间)带有可调整分割条的垂直Box(<mx:VDividedBox>)类型的布局器(想象一下Swing的分割面板), 它有两个分离的代码段组成。底部子容器(译注:UI容器)包含一个数据表格,代码在<FinancialNews> (见Listing 6)。顶部子容器包含一个 <PortfolioView> (见Listing 4)。 Listing 3: Portfolio.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" layout="vertical"> <mx:VDividedBox width="100%" height="100%"> <PortfolioView id="pv"/> <FinancialNews id="fn" security="{pv.selectedSecurity}"/> </mx:VDividedBox> </mx:Application>
Listing 4: 顶部面板内容: PortfolioView.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" width="100%" height="100%" creationComplete="startQuotes();" > <mx:XML format="e4x" id="portfolioModel" source="portfolio.xml" /> <mx:Panel width="100%" height="100%" title="Portfolio"> <mx:ViewStack id="vs" width="100%" height="100%"> <mx:VBox label="Show Grid" icon="iconGrid" > <mx:DataGrid id="portfolioGrid" width="100%" height="100%" dataProvider="{portfolioModel.security}" change="selectedSecurity = portfolioGrid.selectedItem.Symbol;"> <mx:columns><mx:Array> <mx:DataGridColumn dataField="Symbol"/> <mx:DataGridColumn dataField="Quantity" textAlign="right"/> <mx:DataGridColumn dataField="Price" textAlign="right"/> <mx:DataGridColumn dataField="Value" textAlign="right"/> </mx:Array></mx:columns> </mx:DataGrid>
</mx:VBox> <mx:HBox label="Show Chart" icon="iconChart" horizontalAlign="center" verticalAlign="middle"> <mx:PieChart id="portfolioPie" dataProvider="{portfolioModel.security}" showDataTips="true" itemClick="selectedSecurity=event.hitData.item.Symbol" height="90%"> <mx:series> <mx:Array> <mx:PieSeries labelPosition="callout" field="Value" labelFunction="showPosition" nameField="Symbol"
explodeRadius="2"/></mx:Array> </mx:series> </mx:PieChart> <mx:Legend verticalAlign="middle" dataProvider="{portfolioPie}" label="{data.Symbol}"/> </mx:HBox> </mx:ViewStack> </mx:Panel> <mx:HBox horizontalAlign="right" width="98%" > <mx:ToggleButtonBar dataProvider="{vs}" paddingTop="4" /> </mx:HBox> <mx:RemoteObject destination="Portfolio" id="freshQuotes" > <mx:method name="getQuotes" concurrency="last" result="applyQuotes(event.result as Array)"/> </mx:RemoteObject> <!-- mx:Consumer id="consumer" destination="chat-topic-jms" message="applyQuotes(event.message.body.quotes)" / -->
<mx:Script><![CDATA[ import mx.controls.Alert; [Bindable] public var selectedSecurity:String; private function showPosition(data:Object, field:String, index:Number, percentValue:Number):String { return data.Symbol + "\n" + "Shares:" + data.Quantity + "\n" + "Price:" + data.Price + "\n" + "Value:" + data.Value ; } [Embed(source="images/icon_chart.png")] public var iconChart : Class; [Embed(source="images/icon_grid.png")] public var iconGrid : Class;
import com.theriabook.jms.dto.StockQuoteDTO; private function applyQuotes(quotes: Array):void { for (var i:int=0; i<quotes.length; i++) { quote = StockQuoteDTO(quotes[i]); //casting var row:* = ortfolioModel.security.(Symbol==quote.symbol); row.Price = Math.round(100*quote.last)/100; row.Value = Math.round(row.Price * row.Quantity);
|