タイトルとぜんぜん関係ない書き出しで申し訳ないんですが、美人時計の画像ファイルが欲しい - Yamashiro0217の日記 を見ていて Flex の画像ロードってどうやったけなぁ……とか思って、時刻指定して画像表示するコードを書いてました。
実行イメージはこんな感じ。
ソースはこんな感じ。まぁー、こんなもん URL 直叩きで済むんだけどw
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" applicationComplete="init()"> <mx:Script> <![CDATA[ [Bindable] private var hours:Array = new Array(); [Bindable] private var minutes:Array = new Array(); private function init():void { var i:int = 0 for (i = 0; i < 24; i++) { hours.push(i); } for (i = 0; i < 60; i++) { minutes.push(i); } var d:Date = new Date(); hour.selectedIndex = d.getHours(); minute.selectedIndex = d.getMinutes(); } private function getImage(event:MouseEvent):void { urlText.text = "http://www.bijint.com/jp/img/photo/" + zeroPaddingIfSingleDigit(hour.selectedItem) + zeroPaddingIfSingleDigit(minute.selectedItem) + ".jpg" bijinImage.load(urlText.text); } private var p:RegExp = /(^[0-9]$)/; private var r:String = "0$1"; private function zeroPaddingIfSingleDigit(o:Object):String { return o.toString().replace(p, r); } ]]> </mx:Script> <mx:HBox width="100%" horizontalAlign="center"> <mx:ComboBox id="hour" editable="false" enabled="true" width="60" dataProvider="{hours}"> </mx:ComboBox> <mx:Text text="時"/> <mx:ComboBox id="minute" editable="false" enabled="true" width="60" dataProvider="{minutes}"> </mx:ComboBox> <mx:Text text="分"/> <mx:Button id="button1" label="GET" click="getImage(event)" /> </mx:HBox> <mx:TextInput id="urlText" text="URL" width="314"/> <mx:Image id="bijinImage"/> </mx:Application>
そんでまぁイメージのロードはそう大したこと無いんだけど。何に苦労したってゼロパディングの処理。Flex って、C でいうところの sprintf とか Java でいうところの MessageFormat みたいな書式付出力みたいなのが無いっぽいんですよね……無いわけじゃないんだけどゼロパディングするにはちと機能不足でして。
んで、俺の検索能力が足りんのかなぁと色々見て回ったんだけど 数値の文字列化について フォーラム - Flex User Group とか ActionScriptでゼロパディング - 続・ken39arg を見る限り、基本的には自力でやるしかないっぽい。俺の今回の場合は、どーせ一桁の場合だけだし〜ってコトでやっつけ replace にしたけど。Flex でゼロパディングしたい時はフツーにコード書いた方が良さげですな。