如何在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(); } 

我的updateChart()隐藏了整个JFrame。

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

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

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

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

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