站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题请问,我用jfreechart做了一个3d的柱状图,怎么让柱子上显示柱子的值啊?

请问,我用jfreechart做了一个3d的柱状图,怎么让柱子上显示柱子的值啊?

摘要: 请问,我用jfreechart做了一个3d的柱状图,怎么让柱子上显示柱子的值啊?


我已经设置了custombarrenderer3d.setItemLabelsVisible(true);还应该怎么设置?



这是源代码:


package demo;

import java.awt.*;
import java.text.NumberFormat;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.annotations.CategoryTextAnnotation;
import org.jfree.chart.axis.CategoryAnchor;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.*;

public class BarChart3DDemo4 extends ApplicationFrame
{
static class CustomBarRenderer3D extends BarRenderer3D
{

public Paint getItemPaint(int i, int j)
{
CategoryDataset categorydataset = getPlot().getDataset();
double d = categorydataset.getValue(i, j).doubleValue();
if(d >= 0.69999999999999996D)
{
return Color.green;
} else
{
return Color.red;
}
}

public CustomBarRenderer3D()
{
}
}


public BarChart3DDemo4(String s)
{
super(s);
CategoryDataset categorydataset = createDataset();
JFreeChart jfreechart = createChart(categorydataset);
ChartPanel chartpanel = new ChartPanel(jfreechart);
chartpanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartpanel);
}

private static CategoryDataset createDataset()
{
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(77D, "Series 1", "四月");
defaultcategorydataset.addValue(93D, "Series 1", "五月");
defaultcategorydataset.addValue(58D, "Series 1", "六月");
// defaultcategorydataset.addValue(0.75D, "Series 1", "Ellen");
// defaultcategorydataset.addValue(0.63D, "Series 1", "Jack");
defaultcategorydataset.addValue(94D, "Series 1", "七月");
defaultcategorydataset.addValue(70D, "Series 1", "八月");
defaultcategorydataset.addValue(65D, "Series 1", "九月");
return defaultcategorydataset;
}

private static JFreeChart createChart(CategoryDataset categorydataset)
{
JFreeChart jfreechart = ChartFactory.createBarChart3D("四月至九月", "月份", "人数", categorydataset, PlotOrientation.VERTICAL, false, true, false);
CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
categoryplot.setBackgroundPaint(Color.white);

CustomBarRenderer3D custombarrenderer3d = new CustomBarRenderer3D();



// CategoryItemRenderer categoryitemrenderer = categoryplot.getRenderer();
// categoryitemrenderer.setItemLabelsVisible(true);
ValueMarker valuemarker = new ValueMarker(0.69999999999999996D, new Color(100, 200, 255), new BasicStroke(1.0F), new Color(200, 200, 255), new BasicStroke(1.0F), 1.0F);
categoryplot.addRangeMarker(valuemarker, Layer.BACKGROUND);
custombarrenderer3d.setItemLabelPaint(Color.GREEN);
custombarrenderer3d.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
custombarrenderer3d.setItemLabelFont(new Font("黑体",Font.PLAIN,12));
custombarrenderer3d.setItemLabelsVisible(true);

custombarrenderer3d.setMaximumBarWidth(0.050000000000000003D);
categoryplot.setRenderer(custombarrenderer3d);
CategoryTextAnnotation categorytextannotation = new CategoryTextAnnotation("", "Robert", 0.70999999999999996D);
// CategoryTextAnnotation categorytextannotation = new CategoryTextAnnotation();
categorytextannotation.setCategoryAnchor(CategoryAnchor.START);
categorytextannotation.setFont(new Font("SansSerif", 0, 12));
categorytextannotation.setTextAnchor(TextAnchor.BOTTOM_LEFT);
categoryplot.addAnnotation(categorytextannotation);
NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
// numberaxis.setNumberFormatOverride(NumberFormat.getPercentInstance());
numberaxis.setNumberFormatOverride(NumberFormat.getNumberInstance());




return jfreechart;
}

public static JPanel createDemoPanel()
{
JFreeChart jfreechart = createChart(createDataset());
return new ChartPanel(jfreechart);
}

public static void main(String args[])
{
BarChart3DDemo4 barchart3ddemo4 = new BarChart3DDemo4("3D Bar Chart Demo 4");
barchart3ddemo4.pack();
RefineryUtilities.centerFrameOnScreen(barchart3ddemo4);
barchart3ddemo4.setVisible(true);
}
}



还应该设计柱子的最小宽度,否则有可能宽度太小而显示不出数据
eg:
....
BarRenderer3D renderer1=new BarRenderer3D();
renderer1.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer1.setItemLabelFont(new Font("黑体",Font.PLAIN,12));
renderer1.setItemLabelsVisible(true);//显示每个柱子上的数据
renderer1.setMinimumBarLength(1.0);
...
mark


DefaultCategoryDataset dataset = new DefaultCategoryDataset();
String sql = "SELECT...";
.
.
.

ResultSet rs= ...;
try
{
while(rs.next())
{
float f = rs.getFloat("...");
String str= rs_.getString("date");
dataset.addValue(f, "1", str);
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
JFreeChart chart = ChartFactory.createBarChart3D("营业收入统计图",
"日 期",
"营业金额",
dataset,
PlotOrientation.VERTICAL,
false,
false,
false);

JDBCCategoryDataset data = new JDBCCategoryDataset();
ChartPanel chartPanel =new ChartPanel(chart);
chartPanel.setChart(chart);



设置了宽度为1.0d,还是不行啊。


mark


搞定了,原来我要显示的数值字体颜色与背景色相同,重了。


↑返回目录
前一篇: 小第遇到个很困难的sql语句...请高手帮忙?????谢谢了
后一篇: 有个空指针异常,请高手指教一下.