解説
「menuBar.mxml」のソースについて解説します。
基本的な構成はPanelコンポーネントの内部にButtonBarコンポーネントを配置し、XMLファイルに書かれたリンク情報に基づいてButtonBarの中に表示していくものです。
詳しく見てみましょう。まずPanel
タグです。
<mx:Panel id="panel1" title="MENU" width="130" height="300" paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10" backgroundColor="0x8b4513" color="0xdda0dd"> <mx:ButtonBar id="buttonBar" color="0x000000" itemClick="bClickHandler(event);" direction="vertical" buttonMode="true" useHandCursor="true"/> </mx:Panel>
title
プロパティで"MENU"という文字を指定します。これにより、Panel
のヘッダー部分にMENUという文字が現れます。
paddingTop
、paddingLeft
、paddingRight
、paddingBottom
プロパティではそれぞれ、上部、左側、右側、下部から内部コンテンツへの距離をピクセル数で指定します。
ButtonBar
タグではitemClick="bClickHandler(event);"
と指定することでButtonBar
内のボタンを押した際の挙動を指定できます。
direction
プロパティはボタンの並びの方向を指定します。今回は"vertical"
なので縦方向です。useHandCursor="true"
と指定すると、コンポーネント上にカーソルが乗った際にカーソルが手の形になります。
次にScript
タグ内のActionScriptを見てみましょう。
関数init()
は、「menuBar.mxml」の上から3行目にcreationComplete="init();"
とあるように、起動と同時に呼び出されます。
private function init():void { array = new Array(); var loader:URLLoader = new URLLoader(); try { var url:String ="menu.xml?"+new Date().getTime().toString(); loader.load(new URLRequest(url)); } catch (error:Error) { } loader.addEventListener(Event.COMPLETE, function(event:Event):void { var loader:URLLoader = URLLoader(event.target); xml = XML(event.target.data); array = new Array(); for each (var title :XML in xml..label) { array.push(title.toString()); } buttonBar.dataProvider=array; }); }
この関数の内部では、まずURLLoader
で「menu.xml」をロードします。そしてロードしたデータをXMLオブジェクトに変換して「menu.xml」のlabel
要素を配列化したものを、ButtonBar
コンポーネントのdataProvider
プロパティに代入します。
これによって、ButtonBar
にXMLファイルのlabel
要素が表示されるようになります。
次にbClickHandler(event:ItemClickEvent)
です。
private function bClickHandler(event:ItemClickEvent):void { var urlString:String = xml.item[event.index].url + "?" + new Date().getTime().toString(); navigateToURL(new URLRequest(urlString),'_self'); }
この関数はButtonBar
の各ボタンをクリックすることで呼びだされます。
引数のevent
からButtonBar
内の何番目かというインデックス情報が得られますので、先ほどのXMLの該当インデックスのurl
要素を呼び出し、関数navigateToURL()
によって画面を遷移します。
遷移先にも同じ「menuBar.swf」が埋め込んであれば、同様にどの画面にも遷移できます。
最後に
いかがだったでしょうか? 今回はFlex 3のButtonBar
コンポーネントを使用してWebサイトのメニューバーを構築してみましたが、この他にもWebサイトを魅力的なものにするコンポーネントがFlex 3にはあります。今回紹介したものはそのほんの一部です。読者の皆さまもぜひFlex 3を活用して楽しいWebサイトを構築してください。