0

Flash で dataGrid にボタンを作成しようとしています。ただし、私は初心者であり、ボタン列を生成する関数に、各ボタンに使用する必要があるパラメーターを取得させる方法がわかりません。すべてのボタンに特定のラベルが必要です。そのボタンをクリックすると、googleURL がクリップボードにコピーされます。

その関数に変数「buttonLabel」と「googleURL」を渡す方法がわかりません...

コードの .fla 部分は次のとおりです。

        googleURL = "www.someadress.com";
        buttonLabel = "someLabel";

        var btnCol:DataGridColumn = new DataGridColumn("buttonColumnTitle");

        btnCol.cellRenderer = ButtonCell;
        btnCol.editable = false;
        tabulka.addColumn(btnCol);

ここに ButtonCell クラスがあります:

package 
{
import flash.desktop.Clipboard;
import fl.controls.Button;
import fl.controls.listClasses.ICellRenderer;
import fl.controls.listClasses.ListData;
import flash.events.Event;
import flash.events.MouseEvent;


public class ButtonCell extends Button implements ICellRenderer
{
    private var _listData:ListData;
    private var _data:Object;

    public var _buttonLabel:String;
    public var _googleURL:String;


    public function ButtonCell()
    {
        super();

        //_buttonLabel = buttonLabel;
        //_googleURL = googleURL;

        this.label = _buttonLabel;

        addEventListener(MouseEvent.CLICK, onButtonClick);
    }

    public function set data(d:Object):void
    {
        _data = d;
    }

    public function get data():Object
    {
        return _data;
    }

    public function get listData():ListData
    {
        return _listData;
    }

    public function set listData(value:ListData):void
    {
        _listData = value;
    }

    override public function get selected():Boolean
    {
        return _selected;
    }

    override public function set selected(value:Boolean):void
    {

    }

    public function onButtonClick(event:MouseEvent)
    {
        System.setClipboard(_googleURL);
    }
}
}
########################################

おっと、これは完璧に機能します。それが問題でした。どうもありがとう!!しかし、もう1つよくわからないことがあります...ボタンを追加したい場合、最後のボタンしか表示されません...何が問題なのかわかりません。これは 5 つのアイテムを描画するサンプル ストリップですが、ボタンは最後の 1 つだけです...

import ButtonCell;
import fl.controls.dataGridClasses.DataGridColumn;
import fl.controls.listClasses.CellRenderer;
import fl.controls.DataGrid;
import fl.data.DataProvider;

var googleURL:String = "www";
var buttonLabel:String = "bt";

var provide = new DataProvider;

var tabulka:DataGrid = new DataGrid();
tabulka.x = 50;
tabulka.y = 50;
addChild(tabulka);
tabulka.setSize(400, 300);
tabulka.columns = ["Parcela","Odkaz"];
tabulka.columns[0].width = 50;
tabulka.columns[1].width = 350;
tabulka.selectable = false;
tabulka.dataProvider = provide;

var btnCol:DataGridColumn = new DataGridColumn("Copy");
tabulka.addColumn(btnCol);
for (var i = 0; i<5; i++){
    provide.addItem({Parcela:"Item "+i});
    btnCol.cellRenderer = new ButtonCell(buttonLabel = "bt"+i, googleURL = "www" + i);
}
4

1 に答える 1

0

まず、パラメーターがコンストラクターに渡されるようにする必要があります

public function ButtonCell(buttonLabel:String, googleURL:String)
{
    super();

    _buttonLabel = buttonLabel;
    _googleURL = googleURL;

    this.label = _buttonLabel;

    addEventListener(MouseEvent.CLICK, onButtonClick);
}

次に、新しい ButtonCell を作成するときに、次のように引数を渡すだけです。

btnCol.cellRenderer = new ButtonCell(googleURL,buttonLabel);
于 2013-07-12T15:12:57.233 に答える