住所選択のようなもの

by m_oushiden
よく何かに登録するときに住所を選択するやつです。
自前で郵政省のページをフィルタしたものを使ってます。
Flashの勉強会に参加するために取り急ぎ作ってみました。Flash自体が一年ぶりでMXMLで作成するのは初めてなのでいろいろとおかしなつくりしてるかもしれないですが。
♥6 | Line 166 | Modified 2011-07-05 17:15:56 | MIT License
play

ActionScript3 source code

/**
 * Copyright m_oushiden ( http://wonderfl.net/user/m_oushiden )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/pxiK
 */

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx = "http://www.adobe.com/2006/mxml" layout = "absolute" applicationComplete = "init();">
    <mx:ComboBox id = "state"
        y = "0"
        dataProvider = "{prof}"
        fontSize = "25"
        width = "350"
        change = "statechange(event);" 
        close = "statechange(event);" 
        />
    <mx:ComboBox id = "city"
        y = "50"
        dataProvider = "{cityprof}"
        fontSize = "25"
        width = "350"
        change = "citychange(event);"
        close = "citychange(event);"
        />
    <mx:ComboBox id = "town"
        y = "100"
        dataProvider = "{townprof}"
        fontSize = "25"
        width = "350"
        />
    <mx:Label id = "en"
        y = "150"
        fontSize = "20"
        text = "取得データ" />
    <mx:TextArea id="ta" x="0" y="200" width="100%" height="100%" fontSize="16" />
    <mx:Script>
        <![CDATA[
            import com.adobe.serialization.json.*;  
            import mx.core.UIComponent;
            import mx.collections.ArrayCollection;
            import mx.events.DropdownEvent;
            private var txtCityLoader:URLLoader = new URLLoader();
            private var txtTownLoader:URLLoader = new URLLoader();
            
            import flash.utils.escapeMultiByte;
            import flash.utils.unescapeMultiByte;
            private var loader:URLLoader;
            private var xmlData:XML;
            [Bindable]
            //都道府県の一覧コンボボックスに入れるデータ
            private var prof:ArrayCollection = new ArrayCollection(
                [ 
                    {label:"都道府県を選択してください",data:"0"},
                    {label:"北海道",data:"1"},
                    {label:"青森県",data:"2"},
                    {label:"岩手県",data:"3"},
                    {label:"宮城県",data:"4"},
                    {label:"秋田県",data:"5"},
                    {label:"山形県",data:"6"},
                    {label:"福島県",data:"7"},
                    {label:"茨城県",data:"8"},
                    {label:"栃木県",data:"9"},
                    {label:"群馬県",data:"10"},
                    {label:"埼玉県",data:"11"},
                    {label:"千葉県",data:"12"},
                    {label:"東京都",data:"13"},
                    {label:"神奈川県",data:"14"},
                    {label:"新潟県",data:"15"},
                    {label:"富山県",data:"16"},
                    {label:"石川県",data:"17"},
                    {label:"福井県",data:"18"},
                    {label:"山梨県",data:"19"},
                    {label:"長野県",data:"20"},
                    {label:"岐阜県",data:"21"},
                    {label:"静岡県",data:"22"},
                    {label:"愛知県",data:"23"},
                    {label:"三重県",data:"24"},
                    {label:"滋賀県",data:"25"},
                    {label:"京都府",data:"26"},
                    {label:"大阪府",data:"27"},
                    {label:"兵庫県",data:"28"},
                    {label:"奈良県",data:"29"},
                    {label:"和歌山県",data:"30"},
                    {label:"鳥取県",data:"31"},
                    {label:"島根県",data:"32"},
                    {label:"岡山県",data:"33"},
                    {label:"広島県",data:"34"},
                    {label:"山口県",data:"35"},
                    {label:"徳島県",data:"36"},
                    {label:"香川県",data:"37"},
                    {label:"愛媛県",data:"38"},
                    {label:"高知県",data:"39"},
                    {label:"福岡県",data:"40"},
                    {label:"佐賀県",data:"41"},
                    {label:"長崎県",data:"42"},
                    {label:"熊本県",data:"43"},
                    {label:"大分県",data:"44"},
                    {label:"宮崎県",data:"45"},
                    {label:"鹿児島県",data:"46"},
                    {label:"沖縄県",data:"47"} ]);
            //市区町村の初期値コンボボックスに入れるデータ
            [Bindable]
            private var cityprof:ArrayCollection = new ArrayCollection(
                [ 
                    {label:"市区町村を選択してください",data:"0"}]);
            //町域の初期値コンボボックスに入れるデータ
            [Bindable]
            private var townprof:ArrayCollection = new ArrayCollection(
                [ 
                    {label:"町域を選択してください",data:"0"}]);

            //都道府県変更時のイベント
            private function statechange(event:Event):void
            {
                //現在選択されている項目を取得する
                var item:Object = state.selectedItem;
                var CITYURL:String = 'http://akibaengineer.com/yubinapi/citytext.php?state=' +  escape(item.data);
                //テキスト形式で読み込む
                txtCityLoader.dataFormat = URLLoaderDataFormat.TEXT;
                txtCityLoader.addEventListener(Event.COMPLETE, onCityLoaded);
                state.enabled = false;
                city.enabled = false;
                town.enabled = false;
                //読み込み開始
                txtCityLoader.load(new URLRequest(CITYURL));
            }
            //市区町村のデータ取得終了のイベント
            public function onCityLoaded(event:Event):void {
                var outta:String = "";
                var city_data:ArrayCollection = new ArrayCollection();
                var ar:Array = String(txtCityLoader.data).split(";"); 
                city_data.addItem({label:"市区町村を選択してください", data:""});
                // 市区町村データの追加
                //一個多く切り取ってしまうので最後は削る
                for (var i:int = 0; i < ar.length - 1; i++) {
                    var s:Array = (ar[i] as String).split(","); 
                    city_data.addItem( { label:s[0], data:s[1] } );
                    outta += s[0] + ";";
                }
                ta.text = outta;
                en.text = "市区町村一覧";
                city.dataProvider = city_data;
                txtCityLoader.removeEventListener(Event.COMPLETE, onCityLoaded);
                txtTownLoader.removeEventListener(Event.COMPLETE, onTownLoaded);
                //町域のデータは問答無用でクリア
                var town_data:ArrayCollection = new ArrayCollection();
                town_data.addItem({label:"町域を選択してください", data:""});
                town.dataProvider = town_data;
                state.enabled = true;
                city.enabled = true;
                town.enabled = true;
            }
            //市区町村変更時のイベント
            private function citychange(event:Event):void
            {
                //現在選択されている項目を取得する
                var item:Object = city.selectedItem;
                var TOWNURL:String = 'http://akibaengineer.com/yubinapi/towntext.php?townid=' +  escape(item.data);
                //テキスト形式で読み込む
                txtTownLoader.dataFormat = URLLoaderDataFormat.TEXT;
                txtTownLoader.addEventListener(Event.COMPLETE, onTownLoaded);
                state.enabled = false;
                city.enabled = false;
                town.enabled = false;
                //読み込み開始
                txtTownLoader.load(new URLRequest(TOWNURL));
            }
            //町域のデータ取得終了のイベント
            public function onTownLoaded(event:Event):void {
                var town_data:ArrayCollection = new ArrayCollection();
                var ar:Array = String(txtTownLoader.data).split(";"); 
                town_data.addItem({label:"町域を選択してください", data:""});
                // 市区町村データの追加
                //一個多く切り取ってしまうので最後は削る
                for (var i:int = 0; i < ar.length - 1; i++) {
                    town_data.addItem({label:ar[i], data:i});
                }
                txtTownLoader.removeEventListener(Event.COMPLETE, onTownLoaded);
                town.dataProvider = town_data;
                ta.text = txtTownLoader.data;
                en.text = "町域一覧";
                state.enabled = true;
                city.enabled = true;
                town.enabled = true;
            }
            private function init():void
            {
                Security.allowDomain('*');
            }

        ]]>
    </mx:Script>

</mx:Application>