【问题标题】:How to display a JFreeChart in a NetBeans project如何在 NetBeans 项目中显示 JFreeChart
【发布时间】:2011-04-27 12:29:03
【问题描述】:

这与我昨天提出的问题类似,但更具体地解决了问题。 将 JFreeChart 添加到已经包含各种小部件的 NetBeans 项目的正确方法是什么? 我的 updateChart() 隐藏了整个 JFrame。 我想将 JFreeChart 添加到 JFrame。

public class MyClass extends javax.swing.JFrame implements TableModelListener {
    public MyClass() {
        initComponents();
        ...
        updateChart();
    }
    private void updateChart() {
        XYDataset dataset = createXYdataset();
        JFreeChart chart = createChart(dataset);
        JPanel chartPanel = new ChartPanel(chart);
        setContentPane(chartPanel);
    }
    private XYDataset createXYdataset() {
        XYSeries series = new XYSeries("");
        int rows = jTable.getRowCount();
        if (rows > 0) {
            int ms = 0;
            for (int row = 0; row < rows; row++) {
                series.add(ms, 1);
                ms += Integer.parseInt(
                        jTable.getValueAt(row, PULSE_ON).toString());
                series.add(ms, 1);
                series.add(ms, 0);
                ms += Integer.parseInt(
                        jTable.getValueAt(row, PULSE_OFF).toString());
                series.add(ms, 0);
            }
        }
        XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(series);
        return dataset;
    }
    private JFreeChart createChart(XYDataset dataset) {
        JFreeChart chart = ChartFactory.createXYLineChart(
            null,      // chart title
            "ms",                      // x axis label
            null,                      // y axis label
            dataset,                  // data
            PlotOrientation.VERTICAL,
            false,                     // include legend
            true,                     // tooltips
            false                     // urls
        );
        XYPlot plot = (XYPlot) chart.getPlot();
        plot.setDomainPannable(true);
        plot.setRangePannable(true);
        plot.setRangeGridlinesVisible(false);
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        return chart;
    }
}

更正的代码:

private void updateChart() {
    XYDataset dataset = createXYdataset();
    JFreeChart chart = createChart(dataset);
    JPanel chartPanel = new ChartPanel(chart);
    chartPanel.setSize(jPanel1.getSize());
    jPanel1.add(chartPanel);
    jPanel1.getParent().validate();
}

【问题讨论】:

    标签: java swing netbeans jfreechart


    【解决方案1】:

    我的 updateChart() 隐藏了整个 框架。

    JFreeChart chart = createChart(dataset); 
    JPanel chartPanel = new ChartPanel(chart); 
    setContentPane(chartPanel); 
    

    那是因为您将框架的内容窗格替换为免费图表中的面板。

    我不知道您使用的是什么布局管理器,但您需要将免费图表面板“添加”到包含所有其他组件的面板中。因此,当您在 Netbeans 中设计通用表单时,您可能会将一个空面板添加到您想要添加免费图表面板的位置。然后,当您添加免费图表面板时,代码将类似于:

    emptyFreeChartPanel.add( chartPanel );
    emptyFreeChartPanel.getParent().validate();
    

    验证告诉 Swing 组件已添加,因此将调用布局管理器。

    【讨论】:

    • NetBeans IDE 似乎正在为 LayoutManager 使用 GroupLayout。我在项目中添加了一个名为 jPanel1 的 JPanel,并将 jPanel1.add(chartPanel); jPanel1.getParent().validate(); and jPanel1.setVisible(true); 添加到 updateChart(),但图表在 jPanel1 中不可见。还有其他想法吗?
    • GroupLayout 需要使用我一无所知的约束。我想问题是空面板的首选大小为 0,因此未正确设置约束以向其添加另一个组件。我总是手动构建我的 GUI 布局,因此我可以完全控制布局。所以我的建议是学习如何使用布局管理器并自己编写代码,这样你就不会依赖于 IDE。
    • 感谢一百万的线索。它所需要的只是chartPanel.setSize(jPanel1.getSize());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多