2

JasperReports では、レポート要素を配置するために常に絶対 x 座標と y 座標を設定します。たとえば、次の例では、x=70 から始まる白いテキスト フィールド「Hello World」を含む黒い四角形 ((0,0) の左上隅) をレンダリングします。

<rectangle>
    <reportElement x="0" y="0" width="557" height="20" backcolor="#000000" />
    <graphicElement fill="Solid">
        <pen lineWidth="0"/>
    </graphicElement>
</rectangle>

<textField>
    <reportElement x="70" y="2" width="100" height="14" style="pageLayoutFont"/>
    <textElement textAlignment="Left" verticalAlignment="Middle" />
    <textFieldExpression class="java.lang.String">
        <![CDATA["Hello World"]]>
    </textFieldExpression>
</textField>

今、私は DynamicReports を使用して同じことを達成したいと考えています。次のように動作するはずです。

report().addDetail(
    cmp.rectangle()
       .setDimension(557, 20).setStyle(...),
    cmp.text("Hello World").setStyle(...)   
);

ただし、配置を決定する方法が見つかりません (上記の Java の例では、テキストは四角形内ではなく下にレンダリングされます。

4

1 に答える 1

1

この特定のケース (テキスト フィールドの周囲のボックスとしての四角形) では、horizontalLists を使用することができます。水平方向のリストには、背景 (色) として四角形があり、寸法は固定されています。テキストを y=2 にシフトするには、gap最初の水平リストの包含として薄い要素 (同じ幅) を追加してから、newRow. 次に、テキスト フィールドHello Worldが追加された with=70 の 2 番目のギャップ。または、ギャップを省略して、テキスト フィールドにパディング スタイルを追加することもできます。

cmp.horizontalList()
    .setFixedDimension(557, 20)
    .setBackgroundComponent(...)
    .add(
        //1. a thin gap element
        cmp.gap(557,2)
    )
    .newRow()
    .add
    (
        //2. a gap of width 70
        cmp.gap(70,13),
        //3. the text field
        cmp.text("Hello World").setStyle(...)
    )

これはこのケースでは機能しますが、間接的なアプローチであり、混乱を招きやすいものです。さらに、考えられるすべてのポジショニング タスクに対する解決策があるのだろうかと思います。

于 2012-05-03T07:20:38.403 に答える