Java JFree图表图例,带换行符

Java JFree图表图例,带换行符,java,jakarta-ee,jfreechart,Java,Jakarta Ee,Jfreechart,我需要在JFree图表中的一些图例中添加打断线。 我有一些316个字符的传奇,需要每80个字符就打破一次。 最后,我将有4行 无论如何,我尝试了\n、\u2424和 . 它什么也没做。 来自, 我能找到的唯一解决方案,但我希望它能够避免,因为我希望它是动态完成的,就是为每个图例固定一个宽度,所以它应该按照我的需要断开。 编辑:那甚至不起作用 我使用的是jFree图表0.9.20 编辑 目前,我有一个小小的传奇: 这很好,但当我有我的传奇故事时: 对于最后一张图片,我在这里记录了我的图例和打断

我需要在JFree图表中的一些图例中添加打断线。 我有一些316个字符的传奇,需要每80个字符就打破一次。 最后,我将有4行

无论如何,我尝试了\n、\u2424和 . 它什么也没做。 来自,

我能找到的唯一解决方案,但我希望它能够避免,因为我希望它是动态完成的,就是为每个图例固定一个宽度,所以它应该按照我的需要断开。 编辑:那甚至不起作用

我使用的是jFree图表0.9.20

编辑

目前,我有一个小小的传奇:

这很好,但当我有我的传奇故事时:


对于最后一张图片,我在这里记录了我的图例和打断线,但它们不会显示在jFree图表中。

要考虑两个备选方案:给定一个缩写的图例显示字符串

使用setLegendItemToolTipGenerator将完整、未中断的字符串显示为工具提示

renderer.setLegendItemToolTipGenerator(
    new StandardXYSeriesLabelGenerator("Legend {0}"));
使用addChartMouseListener(如图所示)并将鼠标移动事件转发到图例上的相邻文本组件


需要考虑的两个备选方案:给定一个缩写的图例显示字符串

使用setLegendItemToolTipGenerator将完整、未中断的字符串显示为工具提示

renderer.setLegendItemToolTipGenerator(
    new StandardXYSeriesLabelGenerator("Legend {0}"));
使用addChartMouseListener(如图所示)并将鼠标移动事件转发到图例上的相邻文本组件


好吧,我按照我客户的要求做了

首先,你需要创造一种新的传奇,例如名为MyLegend,但请不要在现实世界中这样命名

该类需要像StandardLegend一样扩展Legend并实现Serializable

老实说,我甚至在MyLegend中复制/粘贴了整个StandardLegend。 然后,可以将标准图例修改为自定义图例

为了我的需要,我改变了:

绘制整个图例组的高度和宽度计算 drawSeriesElements可拆分图例的标签,并将每条线逐个绘制。 就这样

结果:


好吧,我按照我客户的要求做了

首先,你需要创造一种新的传奇,例如名为MyLegend,但请不要在现实世界中这样命名

该类需要像StandardLegend一样扩展Legend并实现Serializable

老实说,我甚至在MyLegend中复制/粘贴了整个StandardLegend。 然后,可以将标准图例修改为自定义图例

为了我的需要,我改变了:

绘制整个图例组的高度和宽度计算 drawSeriesElements可拆分图例的标签,并将每条线逐个绘制。 就这样

结果:


后者有一个相关的例子。不是我要求的,而是给我的客户一个很好的建议;-我会问他们对第二个的看法。他们拒绝了我的工具提示:第一个例子你有什么例子吗?他们可能会感兴趣。哦,如果我理解得很好,在每一个解决方案中,你认为只有1个传说,对吗?我每次至少有两个。我应该这么说。我将更新我的问题。鼠标一次只能悬停在一个图例项上,每个图例项依次处理。版本1.0.14是最新版本。有一个与后者相关的例子。这不是我想要的,而是给我的客户一个很好的建议;-我会问他们对第二个的看法。他们拒绝了我的工具提示:第一个例子你有什么例子吗?他们可能会感兴趣。哦,如果我理解得很好,在每一个解决方案中,你认为只有1个传说,对吗?我每次至少有两个。我应该这么说。我将更新我的问题。鼠标一次只能悬停在一个图例项上,每个图例项依次处理。版本1.0.14是最新版本。我甚至尝试了固定宽度…它不起作用:交叉张贴。我甚至尝试了固定宽度…它不起作用:交叉张贴。
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);