📄 chartcomponent.java
字号:
);
break;
case 12 :
chart = ChartFactory.createAreaChart(
chartTitle,
titleFont,
horizAxisLabel,
vertAxisLabel,
dataset,
PlotOrientation.HORIZONTAL,
showLegend,
showTooltips,
drillThroughEnabled,
urlGenerator
);
break;
case 13 :
chart = ChartFactory.createStackedAreaChart(
chartTitle,
titleFont,
horizAxisLabel,
vertAxisLabel,
dataset,
PlotOrientation.VERTICAL,
showLegend,
showTooltips,
drillThroughEnabled,
urlGenerator
);
break;
case 14 :
chart = ChartFactory.createStackedAreaChart(
chartTitle,
titleFont,
horizAxisLabel,
vertAxisLabel,
dataset,
PlotOrientation.HORIZONTAL,
showLegend,
showTooltips,
drillThroughEnabled,
urlGenerator
);
break;
case 15 :
chart = ChartFactory.createPieChart(
chartTitle,
titleFont,
dataset,
TableOrder.BY_COLUMN,
showLegend,
showTooltips,
drillThroughEnabled,
new jpivotPieURLGenerator(TableOrder.BY_COLUMN,dataset, webControllerURL)
);
break;
case 16 :
chart = ChartFactory.createPieChart(
chartTitle,
titleFont,
dataset,
TableOrder.BY_ROW,
showLegend,
showTooltips,
drillThroughEnabled,
new jpivotPieURLGenerator(TableOrder.BY_ROW,dataset, webControllerURL)
);
break;
case 17 :
chart = ChartFactory.create3DPieChart(
chartTitle,
titleFont,
dataset,
TableOrder.BY_COLUMN,
showLegend,
showTooltips,
drillThroughEnabled,
new jpivotPieURLGenerator(TableOrder.BY_COLUMN,dataset, webControllerURL)
);
break;
case 18 :
chart = ChartFactory.create3DPieChart(
chartTitle,
titleFont,
dataset,
TableOrder.BY_ROW,
showLegend,
showTooltips,
drillThroughEnabled,
new jpivotPieURLGenerator(TableOrder.BY_ROW,dataset, webControllerURL)
);
break;
default :
throw new Exception("An unknown Chart Type was requested");
}
try {
chart.setBackgroundPaint(new java.awt.Color(bgColorR, bgColorG, bgColorB));
java.awt.Font slicerFont = new java.awt.Font(slicerFontName, slicerFontStyle, slicerFontSize);
java.awt.Font axisFont = new java.awt.Font(axisFontName, axisFontStyle, axisFontSize);
java.awt.Font axisTickFont = new java.awt.Font(axisTickFontName, axisTickFontStyle, axisTickFontSize);
java.awt.Font legendFont = new java.awt.Font(legendFontName, legendFontStyle, legendFontSize);
Plot plot = chart.getPlot();
if ( plot instanceof CategoryPlot ) {
CategoryPlot catPlot = (CategoryPlot) plot;
catPlot.getDomainAxis().setLabelFont(axisFont);
catPlot.getRangeAxis().setLabelFont(axisFont);
catPlot.getDomainAxis().setTickLabelFont(axisTickFont);
catPlot.getRangeAxis().setTickLabelFont(axisTickFont);
catPlot.getDomainAxis().setMaximumCategoryLabelWidthRatio(100.0f);
double angle = -2.0 * Math.PI / 360.0 * (double) tickLabelRotate;
CategoryLabelPositions oldp = catPlot.getDomainAxis().getCategoryLabelPositions();
CategoryLabelPositions newp = new CategoryLabelPositions(
oldp.getLabelPosition(RectangleEdge.TOP),
new CategoryLabelPosition(
RectangleAnchor.TOP, TextBlockAnchor.TOP_RIGHT,
TextAnchor.TOP_RIGHT, 0.0D, CategoryLabelWidthType.RANGE, (new Float(angle)).floatValue()),
oldp.getLabelPosition(RectangleEdge.LEFT),
oldp.getLabelPosition(RectangleEdge.RIGHT)
);
catPlot.getDomainAxis().setCategoryLabelPositions(newp);
}
else if ( plot instanceof PiePlot3D ) {
PiePlot3D piePlot = (PiePlot3D) plot;
//piePlot.setSectionLabelFont(axisFont);
piePlot.setLabelFont(axisFont);
//piePlot.setSeriesLabelFont(axisTickFont);
//piePlot.setSectionLabelType(piePlot.NO_LABELS);
piePlot.setDirection(org.jfree.util.Rotation.CLOCKWISE);
piePlot.setForegroundAlpha(0.5f);
piePlot.setNoDataMessage("No data to display");
}
else if ( plot instanceof PiePlot ) {
PiePlot piePlot = (PiePlot) plot;
//piePlot.setSectionLabelFont(axisFont);
//piePlot.setSeriesLabelFont(axisTickFont);
piePlot.setLabelFont(axisFont);
//piePlot.setSectionLabelType(piePlot.NO_LABELS);
}
LegendTitle legend = (LegendTitle) chart.getLegend();
if ( legend != null ) {
legend.setItemFont(legendFont);
/*
RectangleAnchor legendRectAnchor=RectangleAnchor.BOTTOM;
switch (legendPosition){
case 0:
legendRectAnchor = RectangleAnchor.LEFT;
break;
case 1:
legendRectAnchor = RectangleAnchor.TOP;
break;
case 2:
legendRectAnchor = RectangleAnchor.RIGHT;
break;
case 3:
legendRectAnchor = RectangleAnchor.BOTTOM;
break;
}
legend.setLegendItemGraphicAnchor(legendRectAnchor);
*/
RectangleEdge legendRectEdge=RectangleEdge.BOTTOM;
switch (legendPosition){
case 0:
legendRectEdge = RectangleEdge.LEFT;
break;
case 1:
legendRectEdge = RectangleEdge.TOP;
break;
case 2:
legendRectEdge = RectangleEdge.RIGHT;
break;
case 3:
legendRectEdge = RectangleEdge.BOTTOM;
break;
}
legend.setPosition(legendRectEdge);
}
if ( showSlicer ) {
RectangleEdge slicerRectPos=RectangleEdge.BOTTOM;
HorizontalAlignment slicerHorizAlignment=HorizontalAlignment.LEFT;
switch (slicerPosition){
case 0:
slicerRectPos = RectangleEdge.TOP;
break;
case 1:
slicerRectPos = RectangleEdge.BOTTOM;
break;
case 2:
slicerRectPos = RectangleEdge.RIGHT;
break;
case 3:
slicerRectPos = RectangleEdge.LEFT;
break;
}
switch (slicerAlignment){
case 4:
slicerHorizAlignment = HorizontalAlignment.CENTER;
break;
case 3:
slicerHorizAlignment = HorizontalAlignment.LEFT;
break;
case 2:
slicerHorizAlignment = HorizontalAlignment.RIGHT;
break;
}
TextTitle slicer = new TextTitle(buildSlicer(),
slicerFont,
Color.BLACK,
slicerRectPos,
slicerHorizAlignment,
VerticalAlignment.CENTER,
new RectangleInsets(0,0,0,0));
slicer.setPosition(slicerRectPos);
chart.addSubtitle(slicer);
}
info = new ChartRenderingInfo(new StandardEntityCollection());
// Write the chart image to the temporary directory
HttpSession session = context.getSession();
filename = ServletUtilities.saveChartAsPNG(
chart,
chartWidth,
chartHeight,
info,
session);
}
catch (Exception e) {
filename = "public_error_500x300.png";
dirty = true;
}
}
// new DOM document
DocumentBuilder parser = XmlUtils.getParser();
// get an image map for the chart, wrap it in xchart tags
String xchart = "<xchart>" + writeImageMap(filename, info, false) + "</xchart>";
/*
if (logger.isDebugEnabled()) {
logger.debug("Chart XML");
logger.debug(xchart);
}
*/
// create an InputStream from the DOM document
InputStream stream =
new ByteArrayInputStream(xchart.getBytes("UTF-8"));
document = parser.parse(stream);
Element root = document.getDocumentElement();
// create url for img tag
String graphURL = getGraphURL(context);
Element img = document.createElement("img");
img.setAttribute("src", graphURL);
img.setAttribute("width", new Integer(chartWidth).toString());
img.setAttribute("height", new Integer(chartHeight).toString());
img.setAttribute("style", "border:0;");
img.setAttribute("usemap", "#"+filename);
root.appendChild(img);
return document;
}
public String getGraphURL(RequestContext context) {
String graphURL = "";
if (baseDisplayURLSet) {
graphURL = CHART_SERVLET;
} else {
graphURL = context.getRequest().getContextPath() + CHART_SERVLET;
}
graphURL = graphURL + (graphURL.indexOf('?') >= 0 ? "&" : "?") + "filename=" + getFilename();
return graphURL;
}
/**
* Writes an image map as a String
* This function has been requested to be added to jfreechart
* Also requires slight change to ChartEntity.getImageMapAreaTag()
* to produce valid xml tag and use & entity in urls.
* Diffs sent to jfreechart project - so hopefully this will be in there soon
*
* @param name the map name.
* @param info the chart rendering info.
* @param useOverLibForToolTips whether to use OverLIB for tooltips
* (http://www.bosrup.com/web/overlib/).
*/
public String writeImageMap(String name,
ChartRenderingInfo info, boolean useOverLibForToolTips) {
StringBuffer sb = new StringBuffer();
sb.append("<map name=\"" + name + "\">");
EntityCollection entities = info.getEntityCollection();
Iterator iterator = entities.iterator();
while (iterator.hasNext()) {
ChartEntity entity = (ChartEntity) iterator.next();
// the tag returned by getImageMapAreaTag is not valid xml
//String area = entity.getImageMapAreaTag(useOverLibForToolTips);
String area="";
if (useOverLibForToolTips)
area = entity.getImageMapAreaTag(new org.jfree.chart.imagemap.OverLIBToolTipTagFragmentGenerator(), new org.jfree.chart.imagemap.StandardURLTagFragmentGenerator());
else
area = entity.getImageMapAreaTag(new org.jfree.chart.imagemap.StandardToolTipTagFragmentGenerator(), new org.jfree.chart.imagemap.StandardURLTagFragmentGenerator());
// modify to valid xml tag
area = area.replaceAll("&", "&");
//area = area.toLowerCase();
//area = area.replaceAll(">$", "/>");
if (area.length() > 0) {
sb.append(area);
}
}
sb.append("</map>");
return sb.toString();
}
/**
* build slicer text string
*/
private String buildSlicer() {
StringBuffer slicer = new StringBuffer();
slicer.append("Slicer: ");
Iterator pi = result.getSlicer().getPositions().iterator();
while (pi.hasNext()) {
Position p = (Position) pi.next();
Member[] members = p.getMembers();
for (int i = 0; i < members.length; i++) {
slicer.append(members[i].getLevel().getLabel());
slicer.append("=");
slicer.append(members[i].getLabel());
if ( i < members.length-1 ) {
slicer.append(", ");
}
}
}
return slicer.toString();
}
/**
* Build a jfreechart CategoryDataset with a single series
*
*/
private DefaultCategoryDataset build1dimDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// column axis
List columnPositions = result.getAxes()[0].getPositions();
colCount = columnPositions.size();
// cells
List cells = result.getCells();
String series = "Series";
// loop on column positions
for (int i = 0; i < colCount; i++) {
Member[] colMembers = ((Position) columnPositions.get(i)).getMembers();
StringBuffer key = new StringBuffer();
// loop on col position members
for (int j = 0; j < colMembers.length; j++) {
// build up composite name for this row
key.append(colMembers[j].getLabel() + ".");
}
dataset.addValue(getNumberValue((Cell)cells.get(i)), series, key.toString());
}
return dataset;
}
/**
* Get cell value as a Number. Parses the cell value string
* using the locale set in this.locale.
* @param cell
* @return value as Number (can be null)
*/
private Number getNumberValue(Cell cell) {
//**** HACK AR 2004.01.10
//String value = cell.getFormattedValue();
Object value = cell.getValue();
DecimalFormatSymbols dfs = new DecimalFormatSymbols(locale);
DecimalFormat formatter = new DecimalFormat();
formatter.setDecimalFormatSymbols(dfs);
Number number = null;
try {
number = (Number)value;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -