免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1084 | 回复: 0
打印 上一主题 下一主题

jfreechart之旅 ItemLabels [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-05 08:02 |只看该作者 |倒序浏览
  
Overview
  JFreeChart will allow you to display item labels in, on or near to each data item in a chart.Refer to 1.bmp.
  A word of advice: use this feature sparingly.
  This chapter covers how to:
• make item labels visible(for the chart types that support item labels);
• change the appearance (font and color) of item labels;
• specify the location of item labels;
• customise the item label text.
               
               
               
Limitations
  There are some limitations with respect to the item labels in the current release of JFreeChart:• some renderers do not support item labels;• axis ranges are not automatically adjusted to take into account the item labels—some labels may disappear off the chart if sufficient margins are not set (use the setUpperMargin() and/or setLowerMargin() methods in the relevant axis to adjust this).
Displaying Item Labels
  Item labels are not visible by default, so you need to configure the renderer to create and display them. This involves two steps:• assign a CategoryItemLabelGenerator or XYItemLabelGenerator to the renderer—this is an objectthat assumes responsibility for creating the labels;• set a flag in the renderer to make the labels visible, either for all series or, if you prefer, on a per series basis.  In addition, you have the option to customise the position, font and color of the item labels.
Assigning a Label Generator
  Item labels are created by a label generator that is assigned to a renderer
  To assign a generator to a CategoryItemRenderer, use the following code:
  CategoryItemRenderer renderer = plot.getRenderer();  CategoryItemLabelGenerator generator = new       StandardCategoryItemLabelGenerator(      "{2}", new DecimalFormat("0.00"));  renderer.setLabelGenerator(generator);
  Similarly, to assign a generator to an XYItemRenderer, use the following code:
  XYItemRenderer renderer = plot.getRenderer();  XYItemLabelGenerator generator = new    StandardXYItemLabelGenerator(    "{2}", new DecimalFormat("0.00"));    renderer.setLabelGenerator(generator);
Making it visible  
  For a CategoryItemRenderer:
  CategoryItemRenderer renderer = plot.getRenderer();    renderer.setItemLabelsVisible(true);
  Similarly, for a XYItemRenderer:
  XYItemRenderer renderer = plot.getRenderer();    renderer.setItemLabelsVisible(true);
  (TIPS)Once set, this flag takes precedence over any per series settings you may have made elsewhere. In order for the per series settings to apply, you need to set this flag to null.
Making Labels Visible For Selected Series
  You can use code similar to the following:
  CategoryItemRenderer renderer = plot.getRenderer();    // clears the ALL series   
    flagrenderer.setItemLabelsVisible(null);
    renderer.setSeriesItemLabelsVisible(0, true);
    renderer.setSeriesItemLabelsVisible(1, false);
Troubleshooting
  If, after following the steps outlined in the previous sections, you still can’t see any labels on your chart, there are a couple of things to consider:
  • the renderer must have a label generator assigned to it—this is an object that creates the text items that are used for each label.
• some renderers don’t yet support the display of item labels (refer to the documentation for the renderer you are using).
Item Label Appearance
  You can change the appearance of the item labels by changing the font and/or the color used to display the labels. As for most other renderer attributes, the settings can be made once for all series, or on a per series basis.
Changing the Label Font
  Change the font for the item labels in all series:
    CategoryItemRenderer renderer = plot.getRenderer();
    renderer.setItemLabelFont(new Font("SansSerif", Font.PLAIN, 10));
  Similarly, to set the font for individual series:
  CategoryItemRenderer renderer = plot.getRenderer();  // clear the settings for ALL series...  renderer.setItemLabelFont(null);  // add settings for individual series...  renderer.setSeriesItemLabelFont(0, new    Font("SansSerif", Font.PLAIN, 10));  renderer.setSeruesItemLabelFont(1, new       Font("SansSerif", Font.BOLD, 10));
Changing the Label Color
  All series:
  CategoryItemRenderer renderer = plot.getRenderer();  renderer.setItemLabelPaint(Color.red);
  Similarly, to set the color for individual series:
  CategoryItemRenderer renderer = plot.getRenderer();  // clear the settings for ALL series...  renderer.setItemLabelPaint(null);  // add settings for individual series...  renderer.setSeriesItemLabelPaint(0, Color.red);  renderer.setSeriesItemLabelPaint(1, Color.blue);
  Once again, notice how the paint for all series has been set to null to prevent it from overriding the per series settings.
Item Label Positioning
  Overview
  The positioning of item labels is controlled by four attributes that are combined into an ItemLabelPositionobject. You can define label positions for items with positive and negative values independently, via the following methods in the CategoryItemRenderer interface:  public void setPositiveItemLabelPosition(    ItemLabelPosition position);  public void setNegativeItemLabelPosition(
    ItemLabelPosition position);
  ItemLabelPosition
  There are four attributes:  • the item label anchor - determines the base location for the item label;ItemLabelAnchor  • the text anchor - determines the point on the label that is aligned to the base location;TextAnchor  • the rotation anchor - this is the point on the label text about which the rotation (if any) is applied;  • the rotation angle - the angle through which the label is rotated.
  
Customising the Item Label Text
  If you want to have complete control over the label text, you can write your own class that implements the CategoryItemLabelGenerator interface.
  Implementing a Custom Item Label Generator
  To develop a custom label generator, you simply need to write a class that implements the method defined in the CategoryItemLabelGenerator interface:
  public String generateLabel(CategoryDataset dataset,     int series, int category);
  (How the generateLabel function used)The renderer will call this method at the point that it requires a String use for a label.The method can return an arbitrary String value, so you can apply any formatting you want to the result. It is also valid to return null if you prefer no label to be displayed.
Example 1 - Values Above a Threshold
  Refer to 3.bmp
  In this first example, the goal is to display labels for the items that have a value greater than some predefined threshold value.  It isn’t all that difficult to achieve, we simply need to:  • write a class that implements the CategoryItemLabelGenerator interface, and implement thegenerateItemLabel() method in such a way that it returns null for any item where the value is less than the threshold;  • create an instance of this new class, and assign it to the renderer using the setLabelGenerator() method.

       
        文件:demo.zip
        大小:52KB
        下载:
下载
       


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63463/showart_517585.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP