簡體   English   中英

帶換行符的JFree圖表圖例

[英]JFree Chart legend with line break

我需要在JFree Chart的某些圖例中添加斷行。 我有一些有316個字符的傳說,需要每80分鍾才能打破。最后,我將有4行。

無論如何,我試過“\\ n”,“\\ u2424”和“”。 它沒有做任何事。 (從http://www.jfree.org/forum/viewtopic.php?f=3&t=10226http://www.jfree.org/forum/viewtopic.php?f=3&t=22417

我能找到的唯一解決方案(但我希望它可以避免,因為我希望它是動態完成的)是為每個圖例修復一個寬度,所以它應該按我的需要打破。 編輯 :即使沒有工作。

我正在使用jFree Chart 0.9.20


編輯

目前,有一個小傳說,這就是我所擁有的: 好

這很好,但是當我有很長的傳說時: 問題:'(

對於最后一張圖片,我記錄了我的傳奇和斷裂線在這里,但它們沒有顯示jFree圖表。

要考慮兩種選擇:給出一個縮寫的圖例顯示字符串,

  • 使用setLegendItemToolTipGenerator()將完整的,不間斷的字符串顯示為工具提示。

     renderer.setLegendItemToolTipGenerator( new StandardXYSeriesLabelGenerator("Legend {0}")); 
  • 使用此處顯示的addChartMouseListener() ,並將圖例上的鼠標移動事件轉發到相鄰的文本組件。

好吧,我按照客戶的意願使它成功了。

首先,你需要制作一種新的Legend ,例如名為MyLegend (但請不要在現實世界中將其命名為)。

該類需要擴展Legend並實現Serializable ,就像StandardLegend一樣。

說實話,我甚至在MyLegend復制/粘貼了整個StandardLegend 然后,您可以將標准圖例修改為自定義圖例。

為了我的需要,我改變了:

  • draw()用於整個Legend組的高度和寬度計算
  • drawSeriesElements()用於分割圖例的標簽並將每一行繪制在另一個下面。

// Multi line management for Legend
String[] multiline = item.getItem().getLabel().split(System.getProperty("line.separator"));
for(int j = 0; j<multiline.length; j++) {
    RefineryUtilities.drawAlignedString(multiline[j], g2,
        (float) item.getLabelPosition().getX(), (float) item
        .getLabelPosition().getY() + g2.getFontMetrics().getHeight()*j, TextAnchor.CENTER_LEFT);
}
  • createDrawableLegendItem()計算每個項目的寬度和高度。 由於現在的圖例是多行的,因此一個項目的每一行與其他項目的寬度不同。 我們需要找到最長的一個來定義項目的實際寬度。 身高也一樣。 現在它是多線的,所以它需要計算知道物品真實高度的線數。

或者,您可以更改drawLegendTitle()以使其成為多行。

根據需要配置該類時,需要將其應用於圖表。

所以,你照常做:

JFreeChart chart = new JFreeChart(...);
chart.set ... // apply your series and options

MyLegend legend = new MyLegend();
legend.set... // apply your legend options if applicable
chart.setLegend(legend);

而已。

結果:

最后結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM