四、建立Provider
這個項目不一定要建立,可以pass,在此範例會用到,可是也可以不使用,主要功能在顯示欄位的資訊,也可以拿來當取用DataSource的提供者。
package com.izero.print.provider;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRDataSourceProvider;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JasperReport;
public class AddressProvider implements JRDataSourceProvider {
@Override
public JRDataSource create(JasperReport arg0) throws JRException {
com.izero.print.datasource.AddressSource ds = null;
ds = new com.izero.print.datasource.AddressSource();
return ds;
//return null;
}
@Override
public void dispose(JRDataSource arg0) throws JRException {
// TODO Auto-generated method stub
}
@Override
public JRField[] getFields(JasperReport arg0) throws JRException,
UnsupportedOperationException {
JRField[] fields = new JRField[2];
fields[0] = new JRBasicField("名稱", "name", java.lang.String.class, "java.lang.String");
fields[1] = new JRBasicField("郵遞區號", "post", java.lang.String.class, "java.lang.String");
fields[2] = new JRBasicField("地址", "address", java.lang.String.class, "java.lang.String");
return fields;
}
@Override
public boolean supportsGetFieldsOperation() {
// TODO Auto-generated method stub
return false;
}
}
JRBasicField
package com.izero.print.provider;
import net.sf.jasperreports.engine.JRPropertiesHolder;
import net.sf.jasperreports.engine.JRPropertiesMap;
public class JRBasicField extends
net.sf.jasperreports.engine.design.JRDesignField {
/**
*
*/
private static final long serialVersionUID = 1L;
private String description;
private String name;
private Class valueClass;
private String valueClassName;
public JRBasicField(String description, String name, Class valueClass,
String valueClassName) {
super();
this.description = description;
this.name = name;
this.valueClass = valueClass;
this.valueClassName = valueClassName;
}
public String getDescription() {
return description;
}
public String getName() {
return name;
}
public Class getValueClass() {
return valueClass;
}
public String getValueClassName() {
return valueClassName;
}
public void setDescription(String desc) {
description = desc;
}
@Override
public JRPropertiesHolder getParentProperties() {
// TODO Auto-generated method stub
return null;
}
@Override
public JRPropertiesMap getPropertiesMap() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean hasProperties() {
// TODO Auto-generated method stub
return false;
}
}
五、開啟iReport,建立DataSource來源(Provider)
在MenuBar上選擇工具(T)->選項(O),在iReport這個tab裡找到Classpath這個分頁加入Add Folder來增加前四個步驟的的Class路徑,也可以先把程式export出jar檔,然後利用Add JAR來增加JAR,如此才可以在之後的步驟裡取得class內容。

選擇Report Datasources這個按鈕,來建立DataSource來源。

選擇New按鈕

選擇一個類型來檔DataSource,這裡選擇JRDataSourceProvider,這個範例其實選擇JavaBeans set Datasource也是可以的。

給於DataSource一個名稱,並告知class的package及名稱。

選擇Test按鈕,設定沒問題時會有視窗告知Connection test successful!

再來選擇Save把設定完成。