2009-04-26 8 views
1

保護されたtextFieldプロパティでいくつかの追加機能を実装するために、TextAreaと継承を試しています。FlexでTextAreaのサブクラスを作成すると 'textField'がインスタンス化されないのはなぜですか?

サブクラスの新しいインスタンスを作成すると、このプロパティはnullに設定されます。私はおそらくsuper()の仕組みを誤解しているでしょうが、コンストラクタの終了後にインスタンス化されていると思いました。

はここTextAreaを延長コードの小さなスニペットです:

public final class ExtTextArea extends TextArea { 

    public function ExtTextArea() { 
    super(); 
    } 

    public function testTextField():void { 
    if (textField == null) 
     Alert.show("null!"); 
    } 
    } 
} 

呼び出し元のコードは単純です:

var extTextArea:ExtTextArea = new ExtTextArea(); 
extTextArea.testTextField(); 

ExtTestAreaAlertは、私はこのコードを実行するたびに表示されます。

これはなぜですか? textFieldのプロパティにアクセスするためにもっと必要なことはありますか?

答えて

2

テキストフィールドは、私はあなたが.addChild(...)を介してディスプレイに追加されるまで、それはヌル残ると信じて「このTextAreaのテキストを表示するための内部UITextField」ですので。私は一度それをディスプレイに追加したら、それはもはやnullではないことを確認するための簡単なテストを実行しました。イベントハンドラを「作成完了」イベントに追加し、その時点で調整することができます(私は思う)。

+0

ポインタありがとうございます。テキスト領域が追加されたら、私は同じ動作を見たことがあります。 – bedwyr

1

Flex SDKにはソースコードが付属しているため、このフィールドが初期化されているかどうかを確認できます。 constrcutorで初期化されませんが、コンポーネントがレイアウトコンテナに追加されたときに呼び出されるcreateChildren()によってインスタンス化された新しいTextFieldが表示されます。

関連する問題