java - 如何在 NetBeans 项目中显示 JFreeChart

标签 java swing netbeans jfreechart

这与我昨天提出的问题类似,但更具体。 将 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();
}

最佳答案

My updateChart() hides the entire JFrame.

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

那是因为您正在用免费图表的面板替换框架的内容面板。

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

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

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

关于java - 如何在 NetBeans 项目中显示 JFreeChart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3969203/

相关文章:

java - 使用 "begin with"而不是 "contains"重新搜索查询

java - 如何操作按钮在 Java 中为 GUI 打开新 Pane

java - Android Studio 扩展通知栏

java - 在 JDBC 中使用 class.forName

java - 事件调度线程内的同步问题

java - 如何将 double 值写入JTextField?

java - 通过单击 jRadiobutton 更改 jComboBox 中的项目

css - 在 Netbeans 8.2 中解析 Bootstrap 4 时出错

java - URL代码求助请短代码(新手Java程序员)

java - 在 Jetty 服务器 v 9.2.2 上运行 JSP 时出错