2011-08-06 2 views
0

は私の中にテキストフィールドとカスタムボタンがあります。オーバーライド性質

var playButton:CustomButton = new CustomButton(); 
playButton.label.embedFonts = true; 
playButton.label.antiAliasType = AntiAliasType.ADVANCED; 
playButton.label.sharpness = 1; 
playButton.label.thickness = 25; 
playButton.label.gridFitType = GridFitType.PIXEL; 
playButton.label.defaultTextFormat = customTextFormat; 

しかし、私の問題は、私がする必要があるということです:私はこれをしたいので

package com.company.utils.ui 
{ 
    import flash.display.Shape; 
    import flash.display.Sprite; 
    import flash.text.TextField; 
    import flash.text.TextFieldAutoSize; 
    import flash.text.TextFormat; 

    public class CustomButton extends Sprite 
    { 
     public var label:TextField; 

ラベルが公開されていますラベルにテキストを割り当てるときは、他の操作を行います(私用のcustomButtonプライベートメソッドを呼び出します)。

playButton.label.text = "myText"; 

どうすればいいですか?

答えて

1

独自のカスタムTextFieldクラスを作成してから、textプロパティをオーバーライドして、値を割り当てるときに余分な機能を追加することができます。その後、CustomButtonクラスでは、labelプロパティはそのカスタムTextFieldクラスのインスタンスになります。

Main.as {文書クラス):

package 
{ 
    import com.flashdevelopprojects.display.CustomButton; 
    import flash.display.Sprite; 
    import flash.events.Event; 

    public class Main extends Sprite 
    { 
     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 

     }// end function 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 

      var customButton:CustomButton = new CustomButton(); 
      customButton.label.text = "supercalifragilisticexpialidocious"; 
      trace(customButton.label.text); // supercalif... 

     }// end function 

    }// end class 

}// end package 

CustomButton.as:

package com.flashdevelopprojects.display 
{ 
    import com.flashdevelopprojects.text.CustomTextField; 
    import flash.display.Sprite; 

    public class CustomButton extends Sprite 
    { 
     public var label:CustomTextField; 

     public function CustomButton() 
     { 
      init(); 

     }// end function 

     private function init():void 
     { 
      label = new CustomTextField(); 

     }// end function 

    }// end class 

}// end package 

CustomTextField.as:

package com.flashdevelopprojects.text 
{ 
    import flash.text.TextField; 

    public class CustomTextField extends TextField 
    { 
     override public function get text():String { return super.text } 
     override public function set text(text:String):void { super.text = truncate(text) } 

     private function truncate(text:String):String 
     { 
      return (text.length > 10) ? text.substring(0, 10) + "..." : text; 

     }// end function 

    }// end class 

}// end class 

私はこれを実証するために以下の例を作っこの例では、文字列値をlabelオブジェクトのtextプロパティに代入すると、t彼はプライベートメソッドtruncate()が呼び出され、その文字列値を解析します。文字列値の長さが10より大きい場合は、切り捨てられた元の文字列値の文字列が返されます。次に、切り捨てられた文字列がsuper.textプロパティに割り当てられます。

labelオブジェクトのtextプロパティをトレースすると、元の文字列ではなく切り捨てられた文字列が取得されます。

1

ラベルを直接公開するのではなく、ラベルのプロパティのゲッター/セッター関数を作成する方が良いでしょう - >Encapsulation

擬似コード:

CustomButton 
{ 
    private var label:TextField; 

    public function CustomButton() 
    { 
    label = new TextField(); 
    } 

    public function setLabelSharpness(sharp:int):void 
    { 
    label.sharpness = sharp; 
    } 
} 

、あなたがのsetText(TXT:文字列)のために別の機能を追加することができ、ラベルのtextプロパティを設定する前に、TXTを切り捨てます。

public function setText(txt:String):void 
{ 
    _originalText = txt; 
    txt = (txt.length > 10) ? txt.substring(0, 10) + "..." : txt; 
    label.text = txt; 
} 

public function getText():String 
{ 
    return label.text; 
} 

public function getOriginalText():String 
{ 
    return _originalText; 
} 

次のようなもの.... 歓声

+0

は私の答え '(> 10 txt.length)から切り捨てをコピーしないでください? txt.substring(0、10)+ "...":txt'またはそれは少なくとも私の答えからの言及です。 – Taurayi

+0

sry、元の質問からコピーしたと思った。答えにはあまり重要ではありませんでした。 – pkyeck