flashでコンポーネントのListを使う際(実は初めて使った)
fl.data.DataProvidarもimportするのだけど よくわからないのでメモ。
ついコンポーネントの付随のものなので
具体的に「見えている」ものと思ってしまったけどそうではなかった。
ヘルプでは
DataProvider クラスには、List、DataGrid、TileList、ComboBox コンポーネントなど、任意のリストベースのコンポーネントのデータを調べたり修正したりできるメソッドおよびプロパティがあります。
データプロバイダは、配列など、データソースとして機能する直線的なアイテムのコレクションです。データプロバイダ内の各アイテムは、データのフィールドを含むオブジェクトまたは XML オブジェクトです。DataProvider.getItemAt() メソッドを使用すると、インデックスを指定することによって、データプロバイダに含まれるアイテムにアクセスできます。
fl.dataの他のクラスは
SimpleCollectionItem
TileListCollectionItem
SimpleCollectionItemはヘルプの例を見ると同様のリストを書くときに便利そうだけど TitleListCollectionItemは よくわからない(Listだけ触るとか 動的にするのにいいのだろうけど イメージしきれていない)
つまりDataProviderも よく分かっていない...
DataProviderの例
package{
import fl.controls.Button;
import fl.controls.ComboBox;
import fl.controls.DataGrid;
import fl.controls.Label;
import fl.controls.TextInput;
import fl.data.DataProvider;
import flash.display.Sprite;
import flash.events.*;
import flash.text.TextFieldAutoSize;
public class Main extends Sprite{
private var southern:DataGrid;
private var northern:DataGrid;
private var world:DataGrid;
private var southernRoster:DataProvider;
private var northernRoster:DataProvider;
private var leagueCB:ComboBox;
private var nameTI:TextInput;
private var goalsTI:TextInput;
private var submitBtn:Button;
public function Main(){
southernRoster = new DataProvider();
northernRoster = new DataProvider();
createDataGrids();
createUI();
}
private function createUI():void {
var description:Label = new Label();
description.text = "Enter player's name, goals scored, and hemisphere of origin:";
description.autoSize = TextFieldAutoSize.LEFT;
nameTI = new TextInput();
goalsTI = new TextInput();
var submitBtn:Button = new Button();
submitBtn.label = "Submit Player";
submitBtn.addEventListener(MouseEvent.CLICK, submitPlayer);
leagueCB = new ComboBox();
leagueCB.addItem( { label:"Northern", data: 0 } );
leagueCB.addItem( { label:"Southern", data: 1 } );
description.move(10,10);
nameTI.move(10,40);
nameTI.setSize(150,24);
goalsTI.move(170,40);
goalsTI.setSize(40,24);
leagueCB.move(220,40);
leagueCB.setSize(120,24);
submitBtn.move(350,40);
goalsTI.restrict = "0123456789";
addChild(description);
addChild(leagueCB);
addChild(submitBtn);
addChild(nameTI);
addChild(goalsTI);
}
private function submitPlayer(e:MouseEvent):void {
if(nameTI.text != "" && goalsTI.text != "") {
var targetRoster:DataProvider;
if(leagueCB.selectedItem.label == "Southern") {
targetRoster = southernRoster;
}
else {
targetRoster = northernRoster;
}
targetRoster.addItem( { Name: nameTI.text, Goals: goalsTI.text } );
var worldRoster:DataProvider = southernRoster.clone();
worldRoster.merge(northernRoster);
worldRoster.sortOn("Goals", Array.NUMERIC | Array.DESCENDING);
southernRoster.sortOn("Goals", Array.NUMERIC | Array.DESCENDING);
northernRoster.sortOn("Goals", Array.NUMERIC | Array.DESCENDING);
world.dataProvider = worldRoster;
nameTI.text = "";
goalsTI.text = "";
}
}
private function createDataGrids():void {
southern = new DataGrid();
northern = new DataGrid();
world = new DataGrid();
southern.move(10,100);
northern.move(180,100);
world.move(350,100);
southern.setSize(170, 250);
northern.setSize(170, 250);
world.setSize(170, 250);
southern.columns =
northern.columns =
world.columns = [ "Name", "Goals" ];
southern.dataProvider = southernRoster;
northern.dataProvider = northernRoster;
addChild(southern);
addChild(northern);
addChild(world);
var northernLabel:Label = new Label();
northernLabel.autoSize = TextFieldAutoSize.LEFT;
northernLabel.text = "Southern Hemisphere";
northernLabel.move(10,75);
addChild(northernLabel);
var southernLabel:Label = new Label();
southernLabel.autoSize = TextFieldAutoSize.LEFT;
southernLabel.text = "Northern Hemisphere";
southernLabel.move(180,75);
addChild(southernLabel);
var majorLabel:Label = new Label();
majorLabel.autoSize = TextFieldAutoSize.LEFT;
majorLabel.text = "World";
majorLabel.move(350,75);
addChild(majorLabel);
}
}
}
SimpleCollectionItemの方の例
package
{
import fl.controls.ComboBox;
import fl.controls.Label;
import fl.data.*;
import fl.data.SimpleCollectionItem;
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextFieldAutoSize;
public class SimpleCollectionItemExample extends Sprite
{
private var dp:DataProvider;
private var cb:ComboBox;
private var myLabel:Label;
public function SimpleCollectionItemExample() {
dp = new DataProvider();
var i:uint;
for(i=0; i<42; i++) {
var sci:SimpleCollectionItem = new SimpleCollectionItem();
sci.label = "Item "+i;
sci.data = null;
dp.addItem( sci );
}
cb = new ComboBox();
cb.dataProvider = dp;
cb.addEventListener(Event.CHANGE, announceSelectedItem);
cb.move(10,40);
addChild(cb);
myLabel= new Label();
myLabel.autoSize = TextFieldAutoSize.LEFT;
myLabel.text = "";
myLabel.move(10,10);
addChild(myLabel);
}
function announceSelectedItem(e:Event):void {
var sci:SimpleCollectionItem = e.target.selectedItem as SimpleCollectionItem;
myLabel.text = "You have selected " + sci.label;
}
}
}
最近のコメント