是的,有可能。
1)您可以使用以下方法之一:ColumnBuilder.addConditionalStyles或ColumnBuilder.addConditionalStyle
2)您应该实现自己的ConditionStyleExpression
工作样本
编码
实现ConditionStyleExpression的代码:
public class FieldComparator extends ConditionStyleExpression implements CustomExpression {
private String fieldName;
private String valueToCheck;
public FieldComparator(String fieldName, String valueToCheck) {
this.fieldName = fieldName;
this.valueToCheck = valueToCheck;
}
@Override
public Object evaluate(Map fields, Map variables, Map parameters) {
Object value = getCurrentValue();
if (value == null)
return null;
if (!fields.containsKey(fieldName)) {
return Boolean.FALSE;
}
if (valueToCheck == null) {
return Boolean.FALSE;
}
return Boolean.valueOf(valueToCheck.equals(fields.get(fieldName)));
}
@Override
public String getClassName() {
return Boolean.class.getName();
}
}
我已经将该字段的值与通过参数传递的字符串进行了比较。
构建报告的代码:
public class ConditionalStylesTest extends BaseDjReportTest {
public static void main(String[] args) throws Exception {
ConditionalStylesTest test = new ConditionalStylesTest();
test.testReport();
test.exportToJRXML();
JasperViewer.viewReport(test.jp);
}
@Override
public DynamicReport buildReport() throws Exception {
DynamicReportBuilder drb = new DynamicReportBuilder();
Integer margin = 20;
drb.setTitle("NBA Players")
.setTitleHeight(30)
.setDetailHeight(15)
.setLeftMargin(margin)
.setRightMargin(margin)
.setTopMargin(margin)
.setBottomMargin(margin)
.setPrintBackgroundOnOddRows(true)
.setColumnsPerPage(1)
.setColumnSpace(1);
drb.addColumn(ColumnBuilder.getNew().setColumnProperty("age", Integer.class.getName())
.setTitle("Age").setWidth(30).setFixedWidth(true).build());
drb.addColumn(ColumnBuilder.getNew().setColumnProperty("name", String.class.getName())
.setTitle("Name").setWidth(100).setFixedWidth(true).build());
drb.addColumn(ColumnBuilder.getNew().setColumnProperty("currentTeam", String.class.getName())
.setTitle("Team").setWidth(120).addConditionalStyle(createConditionalStyle()).setFixedWidth(true).build());
drb.setUseFullPageWidth(true);
return drb.build();
}
private ConditionalStyle createConditionalStyle() {
Style style = new Style();
style.setHorizontalAlign(HorizontalAlign.CENTER);
ConditionStyleExpression expression = new FieldComparator("currentTeam", "-");
return new ConditionalStyle(expression, style);
}
@Override
protected JRDataSource getDataSource() {
return new JRBeanCollectionDataSource(Players.get());
}
}
在这个示例中,我使用了JavaBean 数据源。我对currentTeam字段使用了条件样式。
豆播放器:
public class Player {
private Integer age;
private String name;
private String currentTeam;
public Player(Integer age, String name, String team) {
this.age = age;
this.name = name;
this.currentTeam = team;
}
public Integer getAge() {
return age;
}
public String getName() {
return name;
}
public String getCurrentTeam() {
return currentTeam;
}
}
结果
在JasperViewer中生成的结果:

如您所见,字符串"-"
具有居中对齐方式。