横軸にLineChart
aを使用して作業していますが、各カテゴリに非常にカスタム形式の表示が必要です。CategoryAxis
Labelオブジェクトのテキストフィールドのカスタムフォーマットしか許可されていないため、使用CategoryAxis.LabelFunction
は私の目的には十分強力ではありません。特にこのプロジェクトでは、各カテゴリを2つの異なる複数行ラベルのグリッドまたはHGroupにする必要があります。左のラベルは左揃え、右のラベルは右揃えにする必要があります。
extends Group
とのカスタムクラスを作成してみましたimplements IDataRenderer
。ただし、public function set data(value:Object)
で定義されてIDataRenderer
いる、は常にオブジェクトとしての値で呼び出されているように見えAxisLabel
ます。オブジェクトはオブジェクトを渡さず、文字列(AxisLabel.text
)のみを渡します。
ハックの代替手段として、LabelFunctionを使用してエンコードされた文字列を渡そうとしましたが、それでも問題が発生します。どういうわけか、このコードは、CategoryAxisに何も表示されません。
public class HeatmapAxisLabelRenderer
extends HGroup
implements IDataRenderer
{
public function HeatmapAxisLabelRenderer()
{
super();
this.includeInLayout = true;
this.visible = true;
this.width = 100;
this.height = 40;
// this.percentWidth = 100;
// this.percentHeight = 100;
}
// Internal variable for the property value.
private var _data:Object;
// Make the data property bindable.
[Bindable("dataChange")]
// Define the getter method.
public function get data():Object {
return _data;
}
// Define the setter method, and dispatch an event when the property
// changes to support data binding.
public function set data(value:Object):void {
_data = value;
if (value is AxisLabel && AxisLabel(value).text!=null) {
var parts:Array = AxisLabel(value).text.split("|~|");
if (parts.length != 2) return;
var name:Label = new Label();
name.text = parts[0];
name.setStyle("textAlign","left");
name.width = 100;
var limit:Label = new Label();
limit.text = parts[1];
limit.setStyle("textAlign","right");
limit.width = 100;
this.addElement(name);
this.addElement(limit);
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
} else {
trace("renderer bad value");
}
}