過去数日間私を助けてくれたwezzyと他の人たちに感謝します. 私は彼らのアドバイスを受けて、自分で残りを理解しようとしてきましたが、また行き詰まりました。
次のような構造のtxtファイルがあります。
button1_label
button2_label
button3_label
私のプログラムは実行時にこれら 3 つのボタンを作成し、それらをグループに配置します。
protected function onLoaded(e:Event):void {
var myArrayOfLines:Array = e.target.data.split(/\n/);
var tempBtn:Button;
for(var i:Number = 0;i < myArrayOfLines.length;i++){
var j:Number = i+1;
tempBtn = new Button();
tempBtn.id = "btn" + i;
tempBtn.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void{
var index:uint = parseInt(evt.currentTarget.id.replace("btn", ""));
//TextArea code will go here
trace(text); // Traces null
});
tempBtn.label = myArrayOfLines[i];
btnArray.push(tempBtn);
group.addElement(btnArray[i]);
}
}
私のコードからわかることは、各ボタンが文字列をテキストエリアに出力しようとしているということです。新しい buttons.txt を次のように構成しました。
button1_label
"Hello"
button2_label
"Goodbye"
button3_label
"Come again"
だから私がやりたいのは、button1 に "Hello" を出力させることです。.txt ファイルのすべての行が myArrayOfLines にプッシュされます。助けてくれてありがとう。
編集 完全な説明
質問を単純化しようとして申し訳ありませんが、理解しにくくしたと思います。サーバーなしでクライアント側を実行するテキストエディターを作成しました。定義済みのフレーズを TextArea に挿入するボタンのセットがあります。各ボタンには、myTextArea.insert("sometext"); を実行するリスナーがあります。(ただし、ボタンごとに異なるテキスト。ユーザーは、独自の文字列を挿入する独自のボタンを作成する機能を要求しています。ユーザーがラベルを定義できるいくつかのテキスト入力と、それに挿入される文字列があると考えましたボタンクリック時のテキストエリア. ラベルを 1 行に書き、次に文字列を次の行に書きます. 今、この形式で buttons.txt ファイルを作成して、それが機能するかどうかを確認しました.
最終編集: 作業コード
public function setupBtns(e:Event):void{
var file:File = File.documentsDirectory.resolvePath("buttons.txt");
var stream:FileStreamWithLineReader = new FileStreamWithLineReader();
stream.open(file, FileMode.READ);
while(stream.bytesAvailable) {
// this line contains the headers like button1_label etc.
var label:String;
// this line contains the string
if(stream.bytesAvailable) {
// this line contains the actual label like "Hello";
label = stream.readUTFLine();
line = stream.readUTFLine();
// strip off the first and last character as they are double quotes
line = line.substring(1, line.length-1);
var tempBtn:Button = new Button();
tempBtn.addEventListener(MouseEvent.CLICK, btnListener);
tempBtn.label = label;
tempBtn.name = line;
btnArray.push(tempBtn);
for(var i:Number = 0;i<btnArray.length;i++){
group.addElement(btnArray[i]);
}
}
}
}
protected function btnListener(e:MouseEvent):void{
mainTextField.insertText(e.target.name);
trace(e.target.name);
}