当前位置: 首页 > 知识库问答 >
问题:

将JFreeChart添加到JPanel

饶高雅
2023-03-14

我正在创建一个swing应用程序,并希望将JfreeChart添加到JPanel中。我创建了一个方法,在该方法中我创建了如下所示的图表:

创建了一个全局变量:

JFreeChart chart;
public void createChart(){
        XYSeries series = new XYSeries("XYGraph");
           series.add(1, 1);
           series.add(1, 2);
           series.add(2, 1);
           series.add(3, 9);
           series.add(4, 10);

        // Add the series to your data set
           XYSeriesCollection dataset = new XYSeriesCollection();
           dataset.addSeries(series);

        // Generate the graph
           chart = ChartFactory.createXYLineChart(
           "XY Chart", // Title
           "x-axis", // x-axis Label
           "y-axis", // y-axis Label
           dataset, // Dataset
           PlotOrientation.VERTICAL, // Plot Orientation
           true, // Show Legend
           true, // Use tooltips
           false // Configure chart to generate URLs?
        );

    }
JPanel reporting = new JPanel();
ChartPanel CP = new ChartPanel(chart);
reporting.add(CP,BorderLayout.CENTER);
reporting.validate();
reporting.setBounds(47, 59, 921, 439);
frame.getContentPane().add(reporting);
reporting.setLayout(new BorderLayout(0, 0));
JButton btnReporting = new JButton("Reporting");
        btnReporting.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                createChart();
            }
        });

由于某种原因,当我点击按钮时,图表没有显示出来。

共有1个答案

卜飞鸣
2023-03-14

一堆断章取义的代码并不能让你很容易地理解你在做什么,但类似于...

首先,您需要删除之前从UI中显示的任何内容,否则您将在屏幕上显示多个图表,这可能会导致其他问题。

接下来,当您创建图表时,您需要实际添加到屏幕中。它不会仅仅因为你创建了一个新的图表就“神奇地”更新

// import free chart classes
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JPanel reportingPane;

        public TestPane() {
            setLayout(new BorderLayout());
            reportingPane = new JPanel(new BorderLayout());
            JButton btnReporting = new JButton("Reporting");
            btnReporting.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    JFreeChart chart = createChart();
                    reportingPane.removeAll();
                    reportingPane.add(new ChartPanel(chart));
                    revalidate();
                    repaint();
                }
            });
            add(reportingPane);
            add(btnReporting, BorderLayout.SOUTH);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.dispose();
        }

    }

    public JFreeChart createChart() {
        XYSeries series = new XYSeries("XYGraph");
        series.add(1, 1);
        series.add(1, 2);
        series.add(2, 1);
        series.add(3, 9);
        series.add(4, 10);

        // Add the series to your data set
        XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(series);

        // Generate the graph
        JFreeChart chart = ChartFactory.createXYLineChart(
                        "XY Chart", // Title
                        "x-axis", // x-axis Label
                        "y-axis", // y-axis Label
                        dataset, // Dataset
                        PlotOrientation.VERTICAL, // Plot Orientation
                        true, // Show Legend
                        true, // Use tooltips
                        false // Configure chart to generate URLs?
        );

        return chart;

    }

}

至少应该证明基本的概念...

 类似资料:
  • 问题内容: 如果我有我的Jpanel和我的JFreeChart。如何将此图表添加到JPanel中? 现在,如何在JPanle中添加图表? 问题答案: 从旧的Java论坛线程

  • 问题内容: 我有一个gui,它的Panel包含一系列标签和TextField,并使用spring布局(这是mainPanel),而另一个Panel仅包含button(buttonPanel)。我正在尝试使我的mainPanel也具有垂直滚动条。我想实现我的GUI,以便在JFrame中有2个面板。mainPanel出现在框架的顶部,而buttonPanel出现在mainPanel的下方。 我的问题是

  • 我正在尝试将此 JPanel 添加到 JFrame 中,但我看不到他。当我创建新的 java 类并自己制作这个框架时,一切都很好。 来自JFrame表单的代码。 来自 JPanel 的代码: 来自Java类的代码。 我想不出区别在哪里。有人能帮我吗?

  • 我目前有一个主JFrame包含几个JPanels,每个面板中都有一些文本。创建JPanels的代码在一个单独的类中(它“实现”JPanels)。如何仅向单个面板添加JScrollPane? 我已经花了一些时间尝试这样做,但什么也没有发生。顺便说一下,我的JPanel使用GridLayout 上面的类是另一个面板类的实例变量,它是主面板“MenuHold”的实例变量。但使用“MenuHolder”的

  • 问题内容: RelativeLayout layout = new RelativeLayout(this); AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); View gameView = initializeForView(new MainGame(), config); 什么也没显

  • 问题内容: 现在,我正在通过jquery加载iframe: 我有一个自定义样式表,希望将其应用于该页面。iframe中的页面不在同一域中,这就是为什么它很棘手的原因。我找到了允许您添加单个标签但不能添加整个样式表的解决方案。 编辑: 有问题的页面通过Mobile Safari 加载,因此跨域策略不适用。 问题答案: 基于解决方案您已经找到了如何将CSS应用于iframe?: 或更多jqueryis