Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JfreeChartにてスクロール

いつもお世話になっております。

現在JfreeChartにてグラフを作成しているのですがグラフ描画部分を左右にスクロールさせる方法を探しています。

左右縦軸メモリは常に表示した状態で横軸メモリと描画領域が左右にスクロールするイメージです。
つまりChartPanelそのものをスクロールさせるのではなく中心の描画領域だけ左右にスクロールさせたいと考えています。

まったく同じ内容の質問をこちらの掲示板で見つけ、回答に、

必要なスクロール量を算出して、ChartPanelへのチャート描画前に、スクロール分だけ平行移動すれば良いのではないでしょうか。
平行移動の方法は、java.awt.Graphics,java.awt.Graphics2Dのjavadocを読んでください。

と、あったのですが、呼んでみましたがいまいち使い方、イメージがわきません。

どなたか詳しく教えていただけないでしょうか?
よろしくお願いします。

3

回答

83256

閲覧

3件の回答

評価

0

何か方法があるのかもしれませんが把握していません。
思いつく方法としては BufferedImage に全体を取り出して、
好みの場所を表示するのでは駄目でしょうか?

サンプル
Function2D normal = new Function2D() {
    public double getValue(double x) {
        return Math.sin(x * Math.PI);
    }
};
XYDataset dataset = DatasetUtilities.sampleFunction2D(normal, -5.2, 5.2, 100, "sin");
final JFreeChart chart = ChartFactory.createXYLineChart(null, null, null, dataset,
    PlotOrientation.VERTICAL, false, false, false);
final BufferedImage image = chart.createBufferedImage(1000, 250);
Graphics g = image.getGraphics();
g.setColor(Color.black);
JFrame frame = new JFrame();
JPanel panel = new JPanel() {
    public void paintComponent(Graphics g) {
        JViewport v = ((JViewport) getParent());
        int x = v.getViewPosition().x, e = v.getExtentSize().width, h = getHeight();
        g.drawImage(image, x, 0, x + e, h, x, 0, x + e, h, this);
        g.drawImage(image, x, 0, x + 50, h, 0, 0, 50, h, this);
        v.repaint();
    }
};
panel.setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
JScrollPane scroll = new JScrollPane(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(scroll);
frame.setSize(500, 300);
frame.setVisible(true);

評価

0

Graphics g = image.getGraphics();
g.setColor(Color.black);
は不要でした。
適当なクラスのメインメソッドに入れてお試しください。

評価

0

ありがとうございます。
動かしてみました!凄い!

ですが、JSPやExcel上に貼り付けているグラフをこのようにしたいのですが、それもこのやり方で可能でしょうか?

少し調べてみます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。