좋아요, 제 고객이 원했던대로 작동 시켰습니다.
먼저 새 종류의 Legend
을 만들어야합니다 (예 : MyLegend
).하지만 제발 현실 세계에서와 같은 이름을 지정하지 마십시오.
해당 클래스는 Legend
을 확장해야하며 Serializable
을 구현해야합니다 (StandardLegend
과 동일).
StandardLegend
은 MyLegend
에 복사/붙여 넣기도했습니다. 그런 다음 표준 범례를 사용자 정의로 수정할 수 있습니다. 내 요구를 들어
, 나는 변경 :
draw()
을 전설의 라벨을 분리하고 모든 라인 또 다른 아래 하나를 그릴 높이와 전체 전설의 그룹
drawSeriesElements()
의 폭을 계산.
createDrawableLegendItem()
// 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);
}
는 각 폭과 높이를 산출한다. 범례는 여러 줄이므로 한 항목의 각 줄은 다른 줄과 동일한 너비를 갖지 않습니다. 아이템의 실제 너비를 정의하는 데 가장 긴 것을 찾아야합니다. 같은 높이입니다. 이제는 여러 줄이므로 항목의 실제 높이를 알 수있는 선의 수를 계산해야합니다.
선택적으로 을 변경하여 여러 줄로 만들 수도 있습니다.
해당 클래스가 원하는대로 구성되면 차트에 적용해야합니다.
그래서, 당신은 평소와 같이 수행예요
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);
합니다.
결과 :
이 난 그것은 작동하지 않았다 :(... 고정 폭을 시도 – Shikiryu
크로스 게시 [여기] (http://www.jfree.org/forum/viewtopic. php? f = 3 & t = 110281 & sid = f2edbbdb7ab0df5b40feea73081da10e) – trashgod