我正在使用文本字段来显示列名。为了显示列的相应名称,我尝试了以下方法:
方法1:
textField.setX(currentXPos);
textField.setY(0);
textField.setWidth(columnWidth);
textField.setPrintWhenDetailOverflows(false);
textField.setHeight(colDtlBandHeight);
textField.setStretchWithOverflow(true);
textField.setStretchType(StretchTypeEnum.RELATIVE_TO_BAND_HEIGHT);
textField.setStyle(normalFont);
textField.setBlankWhenNull(true);
JRDesignExpression expression = new JRDesignExpression();
expression.setValueClass(columnClass);
expression.setText("$F{" + columnName + "}");
但是在使用上述方法时,它会抛出一个例外:
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. Syntax error on token "ID", delete this token
value = SHIFT ID; //$JR_EXPR_ID=44$
2. Syntax error, insert ";" to complete BlockStatements
value = BILL NO.; //$JR_EXPR_ID=45$
3. Syntax error on token ".", invalid VariableDeclarator
value = BILL NO.; //$JR_EXPR_ID=45$
4. Syntax error on token "DATE", delete this token
value = BILL DATE; //$JR_EXPR_ID=46$
但是在使用以下行时,列名称设置正确。
方法2:
textField.setExpression(new JRDesignExpression("new String(\""+colTitle+"\")"));
我的怀疑是:
1.为了显示数据,使用了第一种方法。那么在那种情况下怎么没有例外呢?
2.当使用相同的方法显示列名时,为什么会抛出这些异常?
3.第二种方法是如何工作的?
答案 0 :(得分:0)
1。:
我认为数据正确用引号括起来。
<强> 2:强>
根据例外说明(例如Syntax error on token "ID", delete this token
)判断,口译员会看到两个值,SHIFT
和ID
。这里似乎缺少引号,例如。
"SHIFT ID"
"BILL NO."
第3:强>
在第一个示例中,您创建 JRDesignExpression ,设置值类并设置文本。
该字段不包含在引号中,如下面的示例所示。它应该是这样的:
expression.setText("\"$F{" + columnName + "}\"");
另外,您没有将表达式分配给textField:
textField.setExpression(expression)