[英]JFree Chart legend with line break
我需要在JFree Chart的某些圖例中添加斷行。 我有一些有316個字符的傳說,需要每80分鍾才能打破。最后,我將有4行。
無論如何,我試過“\\ n”,“\\ u2424”和“”。 它沒有做任何事。 (從http://www.jfree.org/forum/viewtopic.php?f=3&t=10226 & http://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.