java - 使用 ChartPanel 覆盖paintComponent

标签 java jfreechart paintcomponent

我在图表上显示线条时遇到问题。我有一个 JFreeChart,如果我按如下方式使用 paintComponent(),我会看到线条,但看不到图表。预先感谢您的帮助。

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.data.general.SeriesException;
import org.jfree.data.time.*;
import org.jfree.data.xy.XYDataset;

public class TestChartPanel extends JPanel {

    private static XYDataset createDataset() {

        final TimeSeries series = new TimeSeries("Random Data");
        Day current = new Day(1, 1, 1990);
        double value = 100.0;
        for (int i = 0; i < 4000; i++) {
            try {
                value = value + Math.random() - 0.5;
                series.add(current, new Double(value));
                current = (Day) current.next();
            } catch (SeriesException e) {
                System.err.println("Error adding to series");
            }
        }
        return new TimeSeriesCollection(series);
    }

    private static JFreeChart createChart(final XYDataset dataset) {
        JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "Test",
            "Day",
            "Value",
            dataset,
            false,
            false,
            false);
        return chart;
    }

    /**
    * @param args
    */
    public static void main(String[] args) {

        JFrame f = new JFrame();
        XYDataset xyd = createDataset();
        JFreeChart jfc = createChart(xyd);
        ChartPanel cPanel = new ChartPanel(jfc) {

            /**
            *
            */
            private static final long serialVersionUID = 1L;

            public void paintComponent(Graphics g) {
                super.paintComponents(g);

                System.out.println("paooooooooooooooooooooooo");
                g.setColor(Color.RED);

                g.drawLine(100, 100, 200, 200);
            }
        };
        JPanel jp = new JPanel();
        jp.add(cPanel);
        f.getContentPane().add(jp);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }
}

**我认为我对 JFrameJPanel 做错了,但无法弄清楚我的错误;完整代码已发布。

最佳答案

您对 paintComponent() 的重写应该调用

super.paintComponent(g);

不是

super.paintComponents(g);

关于java - 使用 ChartPanel 覆盖paintComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11800203/

相关文章:

java - 如何在paintComponent方法中初始化并绘制矩形变量?

java - 报告优化问题

Java 应用程序变得越来越慢,直到执行完整的 GC

java - JfreeChart : changing axis line angle on polar chart

java - jfree 图表示例教程

java - 异常: Requires 'start' < 'end'

java - Swing 不在 Mac 上绘图

java - 将文件读入二维数组

java - Java/ColdFusion 和 Lucee 之间的 identityHashCode 区别

java - ImageIO.read 阻止 PaintComponent 执行?