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

将Freechart插入到面板中

石正奇
2023-03-14

我只想插入一个图表(由Graphique类创建)到另一个类的面板中(此处为TabFrame)。我正在使用NetBeans。所以,我创建了一个类Graphique,如您所见:

public class Graphique extends JPanel {
        public Graphique(double cpm1, int temps1, double cpm2,
        double temps2, double cpm3, double temps3, double cpm4,
        double temps4) {
    final XYDataset dataset = createDataset(cpm1, temps1,
            cpm2, temps2, cpm3, temps4, cpm4,
            temps4);
    final JFreeChart chart = createChart(dataset);
    final ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
    add(chartPanel);

    final XYPlot plot = chart.getXYPlot();
    plot.setBackgroundPaint(Color.lightGray);

    plot.setDomainGridlinePaint(Color.white);
    plot.setRangeGridlinePaint(Color.white);

    final XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
    renderer.setSeriesLinesVisible(1, false);
    renderer.setSeriesShapesVisible(1, false);
    plot.setRenderer(renderer);

}

public XYDataset createDataset(double cpm1, int temps1, double cpm2,
        double temps2, double cpm3, double temps3, double cpm4,
        double temps4) {
    final XYSeries series1 = new XYSeries("log cpm net");
    series1.add(temps1, cpm1);
    series1.add(temps2, cpm2);
    series1.add(temps3, cpm3);
    series1.add(temps4, cpm4);
    final XYSeriesCollection dataset = new XYSeriesCollection();
    dataset.addSeries(series1);
    return dataset;

}

private JFreeChart createChart(final XYDataset dataset) {
    final JFreeChart chart = ChartFactory.createXYLineChart("log Chart", // chart
                                                                            // title
            "temps", // x axis label
            "log CPM", // y axis label
            dataset, // data
            PlotOrientation.VERTICAL, true, // include legend
            true, // tooltips
            false // urls
            );
    return chart;

    }

}

下一步是将Graphique类创建的图表集成到另一个名为此处TabFrame的类中的面板(由于netbeans的GUI界面已经声明)中:

  JPanel cp = new Graphique(Math.log(CMP1corBis), tempsCumule1, Math.log(CMP2corBis),
          tempsCumule2,Math.log(CMP3corBis), tempsCumule3,Math.log(CMP4corBis), tempsCumule4);
  PanelGraphique1.add(cp);

为什么这不起作用?

共有2个答案

戚晨
2023-03-14

使用替代数据,图表显示如下所示;问题可能出在您提供的参数中,或者忽略了所包含的窗口的pack()。另外,考虑此处讨论的原因,重写<代码> GETAPYRESSIZE()<代码>。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 * @see https://stackoverflow.com/a/25047904/230513
 */
public class Test {

    private class Graphique extends JPanel {

        public Graphique() {
            final XYDataset dataset = createDataset();
            final JFreeChart chart = createChart(dataset);
            final ChartPanel chartPanel = new ChartPanel(chart){

                @Override
                public Dimension getPreferredSize() {
                    return new Dimension(500, 270);
                }
            };
            add(chartPanel);

            final XYPlot plot = chart.getXYPlot();
            plot.setBackgroundPaint(Color.lightGray);

            plot.setDomainGridlinePaint(Color.white);
            plot.setRangeGridlinePaint(Color.white);

            final XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
            renderer.setSeriesLinesVisible(1, false);
            renderer.setSeriesShapesVisible(1, false);
            plot.setRenderer(renderer);
        }

        private XYDataset createDataset() {
            final XYSeries series1 = new XYSeries("log cpm net");
            series1.add(1, 10);
            series1.add(2, 20);
            series1.add(3, 30);
            series1.add(4, 40);
            final XYSeriesCollection dataset = new XYSeriesCollection();
            dataset.addSeries(series1);
            return dataset;
        }

        private JFreeChart createChart(final XYDataset dataset) {
            final JFreeChart chart = ChartFactory.createXYLineChart("log Chart",
                    "temps", // x axis label
                    "log CPM", // y axis label
                    dataset, // data
                    PlotOrientation.VERTICAL, true, // include legend
                    true, // tooltips
                    false // urls
            );
            return chart;
        }

    }

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new Graphique());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            new Test().display();
        });
    }
}

柳正志
2023-03-14

您没有为Graphique面板指定LayoutManager,因此当您将ChartPanel添加为子组件时,它很可能不会定位或调整大小,因此您不会看到任何图表。

 类似资料:
  • 问题内容: 我在golang中有一个模板,其中有一个看起来像这样的字符串: 我期望输出是这样的: 但是我看到的是这样的: 我还尝试插入一些JSON,但golang会转义字符并在不应该出现的地方添加类似内容。 如何在golang中插入HTML模板而不发生这种情况? 问题答案: 您应该将变量作为a 而不是作为a 传递: https://play.golang.org/p/QKKpQJ7gIs 如您所见

  • 我正在构建一个Java程序。该程序的核心在JFrame中可视化,其中包含一个JMenuBar和各种JMenuItem和JMenu。关键是我在所有框架中添加了一个centralPanel,但是如果我在centralPanel中添加了一些内容,那么只有在调整主框架的大小、缩小或放大它时,它才会显示出来!代码如下: 这是构造函数: 在这里,我添加了中央面板,在这里,在ActionListener中,我试

  • 问题内容: 我想将Follium Map插入到Jinja模板中。 运行 template / index.html -Flask的Jinja模板 我的网站显示当前行: 但是我需要在此div块中生成方法follium_map.save(’map.html’)的地图。 我怎样才能做到这一点? 问题答案: 你可以使用来保存生成的。然后,你可以使用jinja2来。如所示将生成的html包裹在div标签中时

  • 问题内容: 我有一个非常基本的模板(basic_template.html),并希望使用使用另一部分模板格式化的数据来填写。basic_template.html可能包含使用部分模板格式化的几件事。 我应该如何在views.py中构建代码? 我这样做的原因是稍后将使用Ajax填充。我这样做对吗? 问题答案: 你可以做: 另一个Django模板在哪里。在这里,你可以放入将用Ajax获得的HTML。

  • 问题描述:我有一个JFrame,在这个JFrame中有一个带按钮的JPanel,当我按下按钮时,一个动作监听器会用一个新的JPanel来更改当前的JPanel,其中包含另外两个JPanel,这两个JPanel都有一个inputMap,当用户按下“up”键时,这两个JPanel都会生成一些东西。问题是:当我用新的JPanel更改JPanel时,“up”键不会起任何作用。 下面是代码:是一个SSCCE

  • 我想使用PHP将大的xml值插入到sql中。 我可以用PHP做这个工作吗?我该怎么做呢? 谢谢