1

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 Chart では表示されません。

4

2 に答える 2

3

考慮すべき 2 つの代替案: 省略された凡例表示文字列が与えられた場合、

  • setLegendItemToolTipGenerator()途切れていない完全な文字列をツール ヒントとして表示するために使用します。

    renderer.setLegendItemToolTipGenerator(
        new StandardXYSeriesLabelGenerator("Legend {0}"));
    
  • ここaddChartMouseListener()に示されているを使用して、マウスで移動したイベントを凡例上で隣接するテキスト コンポーネントに移動します。

于 2012-04-28T02:30:22.213 に答える
1

了解しました。クライアントが希望するとおりに機能させました。

まず、新しい種類の名前を付ける必要があります。Legendたとえば、名前を付けMyLegendます(ただし、現実の世界ではそのような名前を付けないでください)。

そのクラスは、同じ方法で拡張Legend および実装する必要があります。SerializableStandardLegend

正直なところ、全体StandardLegendをコピーして貼り付けましたMyLegend。次に、標準の凡例をカスタムの凡例に変更できます。

私のニーズのために、私は変更しました:

  • 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()各アイテムの幅と高さを計算します。凡例が複数行になっているため、1つのアイテムの各行の幅が他のアイテムと同じになることはありません。アイテムの実際の幅を定義するには、最も長いものを見つける必要があります。身長についても同じです。これで複数行になるため、アイテムの実際の高さを知るために取得した行数を計算する必要があります。

オプションで、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);

それでおしまい。

結果 :

最終結果

于 2012-05-03T09:09:15.997 に答える