如何使用Java API动态更改JasperReports中列表中的单元格宽度

如何使用Java API动态更改JasperReports中列表中的单元格宽度,java,jasper-reports,Java,Jasper Reports,我找不到从JasperReports中的列表动态更改单元格宽度的正确方法 final JasperDesign template = JRXmlLoader.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("report_tarif_comparison.jrxml")); final JRBand[] bands = template.getAllBands(); final JRElement e

我找不到从JasperReports中的列表动态更改单元格宽度的正确方法

final JasperDesign template = JRXmlLoader.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("report_tarif_comparison.jrxml"));
final JRBand[] bands = template.getAllBands();
final JRElement element = bands[1].getElementByKey("compareList");
我通过
getElementByKey
获取列表,但元素对象没有
setCellWidth
setCellHeight

我的jrxml文件的一部分:

<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Horizontal" ignoreWidth="false">
    <datasetRun subDataset="compareTarif" uuid="03bdfbc4-19ae-47a1-a27e-bbacde25965f">
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{policies})]]></dataSourceExpression>
    </datasetRun>
    <jr:listContents height="494" width="138">
        ....//textfields
    </jr:listContents>
</jr:list>

..//textfields
在Jaspersoft Studio中,我可以从列表中更改属性窗口中的单元格宽度:


您必须执行以下操作:

JRComponentElement=(JRComponentElement)条带[1]。getElementByKey(“compareList”);
ListComponent=(ListComponent)元素.getComponent();
DesignListContents=(DesignListContents)组件。getContents();
内容。设置宽度(…);
请注意,这只会更改单元格的宽度。如果您还想使内部的文本字段更宽,则必须显式地执行此操作;您可以通过
contents.getElements()

获取元素,谢谢您的帮助:)。最后,元素没有方法getComponent()。但是我循环了带[1].getChildren()并证明该子级是否是JRDesignComponentElement的实例。然后我使用了getComponent()方法。