Java 图例标题在图表中未正确显示
我使用JFreeChart API v1.5.0创建了一个条形图,并在图表中添加了带有标题的图例 我使用了这个示例,并在示例中添加了以下图例代码Java 图例标题在图表中未正确显示,java,legend,jfreechart,Java,Legend,Jfreechart,我使用JFreeChart API v1.5.0创建了一个条形图,并在图表中添加了带有标题的图例 我使用了这个示例,并在示例中添加了以下图例代码 //Legend default properties protected static final boolean LEGEND_ON = true; private static final RectangleEdge LEGEND_POSITION = RectangleEdge.RIGHT; private static final Strin
//Legend default properties
protected static final boolean LEGEND_ON = true;
private static final RectangleEdge LEGEND_POSITION = RectangleEdge.RIGHT;
private static final String LEGEND_TITLE_TEXT = "Legend";
private static final Font LEGEND_TITLE_FORMAT = new Font(Font.SANS_SERIF, Font.PLAIN, 12);
private static final Color LEGEND_TITLE_COLOR = Color.BLACK;
private static final double LEGEND_MAX_WIDTH = 0.0;
private static final Color LEGEND_BG_COLOR = Color.WHITE;
private static final Color LEGEND_BORDER_COLOR = Color.WHITE;
private static final Font LEGEND_TEXT_FORMAT = new Font(Font.SANS_SERIF, Font.PLAIN, 12);
private static final Color LEGEND_TEXT_COLOR = Color.BLACK;
LegendTitle legend = chart.getLegend();
legend.setPosition(LEGEND_POSITION);
legend.setWidth(LEGEND_MAX_WIDTH);
legend.setBackgroundPaint(LEGEND_BG_COLOR);
legend.setFrame(new BlockBorder(1, 1, 1, 1, LEGEND_BORDER_COLOR));
legend.setItemFont(LEGEND_TEXT_FORMAT);
legend.setItemPaint(LEGEND_TEXT_COLOR);
if (LEGEND_TITLE_TEXT != null) {
TextTitle legendTitle = new TextTitle();
legendTitle.setText(LEGEND_TITLE_TEXT);
legendTitle.setPosition(LEGEND_POSITION);
legendTitle.setPaint(LEGEND_TITLE_COLOR);
legendTitle.setFont(LEGEND_TITLE_FORMAT);
legendTitle.setHorizontalAlignment(HorizontalAlignment.CENTER);
legendTitle.setVerticalAlignment(VerticalAlignment.CENTER);
chart.addSubtitle(1, legendTitle);
}
当我与上面的图例代码一起运行示例时,我得到以下输出
我注意到图例标题显示不正确,因为它是垂直放置的,而不是水平放置在右侧的图例容器中(如下图所示,用于预期输出)。我确实尝试了一些步骤,例如使用TextUtils.drawRotatedString()和TextUtils.drawAlignedString(),但无法修复图例标题位置及其对齐方式
如何将图例标题放置在图例容器顶部并水平对齐
我正在为图例标题寻找一个类似的输出,如下所示,它是使用不同的图表框架生成的
我想按照上面的输出对齐和定位我的图例标题。基于本文提供的示例,我修改了代码,使用
BlockContainer添加自定义图例,以从上面的问题中获得如图1所示的所需输出
更新代码:
//Legend default properties
pro tected static final boolean LEGEND_ON = true;
private static final RectangleEdge LEGEND_POSITION = RectangleEdge.RIGHT;
private static final String LEGEND_TITLE_TEXT = "Legend";
private static final Font LEGEND_TITLE_FORMAT = new Font(Font.SANS_SERIF, Font.PLAIN, 12);
private static final Color LEGEND_TITLE_COLOR = Color.BLACK;
private static final double LEGEND_MAX_WIDTH = 0.0;
private static final Color LEGEND_BG_COLOR = Color.WHITE;
private static final Color LEGEND_BORDER_COLOR = Color.WHITE;
private static final Font LEGEND_TEXT_FORMAT = new Font(Font.SANS_SERIF, Font.PLAIN, 12);
private static final Color LEGEND_TEXT_COLOR = Color.BLACK;
LegendTitle legend = chart.getLegend();
legend.setPosition(LEGEND_POSITION);
legend.setWidth(LEGEND_MAX_WIDTH);
legend.setBackgroundPaint(LEGEND_BG_COLOR);
legend.setFrame(new BlockBorder(1, 1, 1, 1, LEGEND_BORDER_COLOR));
legend.setItemFont(LEGEND_TEXT_FORMAT);
legend.setItemPaint(LEGEND_TEXT_COLOR);
if (LEGEND_TITLE_TEXT != null) {
TextTitle legendTitle = new TextTitle();
legendTitle.setText(LEGEND_TITLE_TEXT);
legendTitle.setPosition(LEGEND_POSITION);
legendTitle.setPaint(LEGEND_TITLE_COLOR);
legendTitle.setFont(LEGEND_TITLE_FORMAT);
legendTitle.setHorizontalAlignment(HorizontalAlignment.CENTER);
legendTitle.setVerticalAlignment(VerticalAlignment.CENTER);
BlockContainer legendCont = new BlockContainer(new ColumnArrangement());
legendCont.add(legendTitle, RectangleEdge.TOP);
BlockContainer items = legend.getItemContainer();
legendCont.add(items);
legend.setWrapper(legendCont);
//Remove existing legend to avoid duplicate legend display.
chart.removeLegend();
//show legend container with title and items
chart.addSubtitle(legend);
}
执行上述代码后,我得到以下输出
@trashgood添加了图例标题对齐和标题位置的预期输出。另请参见此内容,并可能检查。@trashgood示例显示将图例添加为单独的面板,这不是我的用例。在我的问题中,第一个图像显示图表中的图例,但标题图例本身不显示在图例容器的顶部。这是我的问题,对,;演示中的那个看起来更像你的模型;更多。@trashgod因为,legend title是一个TextTitle实例。我们可以旋转它并改变它的X和Y位置吗?可能吗?