Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 我可以在flex图形对象上设置文本吗?_Apache Flex_Graphics_Datagrid - Fatal编程技术网

Apache flex 我可以在flex图形对象上设置文本吗?

Apache flex 我可以在flex图形对象上设置文本吗?,apache-flex,graphics,datagrid,Apache Flex,Graphics,Datagrid,我是否可以在Flex图形对象上有效地调用等效的setText 具体来说,我使用自定义单元渲染器在datagrid中显示数据。渲染器使用图形对象根据基础数据仅设置单元格的一部分(如左半部分)的背景颜色。我想能够有文字只在该部分的细胞有背景色(如中心在左半部分) 我知道所有宽度(单元格本身和图形对象),但我不知道如何在图形对象上设置文本(居中) 有人有什么想法吗? Tks vm简而言之,您不能用图形对象以编程方式绘制文本。您需要做的是创建一个类似文本的类(例如标签、文本等),并将其适当地放置在单元渲

我是否可以在Flex图形对象上有效地调用等效的setText

具体来说,我使用自定义单元渲染器在datagrid中显示数据。渲染器使用图形对象根据基础数据仅设置单元格的一部分(如左半部分)的背景颜色。我想能够有文字只在该部分的细胞有背景色(如中心在左半部分)

我知道所有宽度(单元格本身和图形对象),但我不知道如何在图形对象上设置文本(居中)

有人有什么想法吗?
Tks vm

简而言之,您不能用图形对象以编程方式绘制文本。您需要做的是创建一个类似文本的类(例如标签、文本等),并将其适当地放置在单元渲染器中

假设您正在
updateDisplayList
中进行自定义绘制,则需要执行以下操作:

override protected function updateDisplayList( unscaledWidth:Number, unscaledHeight:Number ):void
{
    super.updateDisplayList( unscaledWidth, unscaledHeight );

    // perform all your custom painting

    var label:Label = new Label();
    label.text = "Some text";

    label.width = widthOfCustomPainting;
    // can also set x- and y-coordinates of label too

    label.setStyle( "textAlign", "center" );

    this.addChild( label );
}
这需要根据项目渲染器的设置进行一些调整,但这应该是您所需要的


请注意,我上面的代码没有为自定义项呈现器使用最佳实践。值得一看的是,其中描述了如何正确创建项目渲染器。

多边形实验室提出了一种解决方案,可以将字体转换为矢量曲线,以便您可以将文本绘制为图形。代码尚未发布,但您可以在注释中看到一些类似的项目


但是,您需要在AS中而不是在MXML中执行此操作,或者为此编写自己的类。

以下是一个避免添加UI组件的解决方案:

    private function WriteText(text:String, rect:Rectangle):void
    {
        var uit:UITextField = new UITextField();
        uit.text = text;
        uit.width = rect.width;
        var textBitmapData:BitmapData = ImageSnapshot.captureBitmapData(uit);
        var matrix:Matrix = new Matrix();
        var x:int = rect.x;
        var y:int = rect.y;
        matrix.tx = x;
        matrix.ty = y;
        graphics.beginBitmapFill(textBitmapData,matrix,false);
        graphics.drawRect(x,y,uit.measuredWidth,uit.measuredHeight);
        graphics.endFill();
    }
其思想是使用UITextField创建位图,该位图可与图形对象一起用于填充矩形


这是基于Adobe Developer Connection上Olga Korokhina的一篇文章。

将textformat用于uit的defaulttextformat是我的问题的解决方案…

此外,如果你想发疯,UITextField是更为原生的文本元素(或TextField)。不管怎样,你都可以设置一个背景色,所以它也可能是这个问题的阴影部分。说得好,格伦!你可以只使用一个指定宽度和背景颜色的文本字段,甚至不必担心定制绘画。太棒了-非常感谢它的工作。这可能不是最优雅的解决方案,但目前对我来说还不错。事实上,我必须给我的标签起一个名字,并检查是否有一个同名的孩子已经添加到“this”。。。所以如果(this.getChildByName(tmpLabel.name)==null){this.addChild(tmpLabel);}我认为这是因为呈现过程(可能是我将阅读的您的博客中的内容!)。又来了。很高兴听到一切顺利!不过,我绝对会推荐这篇博文。它是由Adobe Flex团队中的一位成员编写的,因此他非常了解Flex的内部结构。这是一个很好的技巧,但这样会丢失字体抗锯齿功能。