0

そうですね、DataGrid2 つの列を持つ があります。左の列では、テキストを右揃えにします。より具体的には、列が小さすぎてテキスト全体を表示できない場合は、一番右の内容を含めるようにします。

この記事で指定されているように、のプロパティをクラスに拡張CellRendererして設定するカスタム クラスを作成することで、なんとか整列させることができました。ただし、これは私が望んでいるとおりには機能しません。確かにテキストは右に揃えられますが、列が小さすぎてすべてのテキストが収まらない場合でも、一番左のセクションのみが表示されます。DataGridcellRenderer

代わりにテキストの一番右の部分を表示する方法を知っている人はいますか?

ご存知のように、これは FlashDevelop の純粋な AS3 AIR アプリケーションであり、私のCellRendererクラスは上記でリンクした記事 (つまり ) のものと同じRightAlignCellです。

4

1 に答える 1

2

これが私の元のコードですCellRenderer

package  
{
    import fl.controls.listClasses.CellRenderer;
    import fl.controls.listClasses.ICellRenderer;
    import flash.text.TextFormat;
    import flash.text.TextFormatAlign;

    public class RightAlignCell extends CellRenderer implements ICellRenderer
    {
        private var tf:TextFormat;

        public function RightAlignCell() 
        {
            tf = new TextFormat();
            tf.align = TextFormatAlign.RIGHT;
        }

        override protected function drawLayout():void
        {
            textField.setTextFormat(tf);
            super.drawLayout();
        }

    }

}

ただし、 の値を変更しtextField.xても効果はありませんでした。super.drawLayout()これは、オーバーライドされたバージョンの最後で呼び出していたためだと考えました。これにより、値がデフォルトに戻ったようです。最初に呼び出した場合、動作を変更しxました (ここでは顕著な例として -50 を使用しています)。

        override protected function drawLayout():void
        {
            super.drawLayout();
            textField.setTextFormat(tf);
            textField.x = -50;
        }

ただし、値を に設定しようとすると、Gio が提案したように、望ましい結果が得られるはずですが、 5 ピクセルthis.width - textField.widthしか増加しませんでした。x問題はsuper.drawLayout(). の幅を列の内側に収まるようにサイズ変更していたtextFieldようです。そのため、計算が機能しませんでした。関数を削除しようとしましたが、列を適切に表示するために必要な多くのコードを処理したため、それは大きな混乱でした。代わりに、次のプロパティを使用して、サイズを変更したtextField場合でも、サイズ変更自体を適切な幅に自動的に調整することにしました。super.drawLayout()autoSize

        override protected function drawLayout():void
        {
            super.drawLayout();
            textField.setTextFormat(tf);
            textField.autoSize = TextFieldAutoSize.LEFT;
            textField.x = this.width - textField.width;
        }

いくつかの問題はありましたが、今では機能しました。ただし、これらは最小限であり、テキスト形式と自動サイズを定義する行をコンストラクターに移動することで修正されましたCellRenderer(とにかく最初に行うべきだったことに気付きました)。最終的に、私の最終的な機能クラスは次のようになりました。

package  
{
    import fl.controls.listClasses.CellRenderer;
    import fl.controls.listClasses.ICellRenderer;
    import flash.text.TextFormat;
    import flash.text.TextFormatAlign;
    import flash.text.TextFieldAutoSize;

    public class RightAlignCell extends CellRenderer implements ICellRenderer
    {
        private var tf:TextFormat;

        public function RightAlignCell() 
        {
            tf = new TextFormat();
            tf.align = TextFormatAlign.RIGHT;
            textField.setTextFormat(tf);
            textField.autoSize = TextFieldAutoSize.LEFT;
        }

        override protected function drawLayout():void
        {
            super.drawLayout();
            textField.x = this.width - textField.width - 5;
        }

    }

}

5 ピクセルの減算はtextField.x、列の境界に触れるのではなく、テキストの見栄えを良くするために行った、ほんの少しの配置です。

解決策は簡単ですが、長い投稿で申し訳ありませんが、詳しく説明することにしました。基本的に、私は上記のクラスを思いつきましたが、うまくいきました。

于 2013-01-06T18:37:56.257 に答える