代码之家  ›  专栏  ›  技术社区  ›  jacknad

如何在NetBeans项目中显示JFreeChart

  •  6
  • jacknad  · 技术社区  · 15 年前

    这与我昨天问的问题类似,但更具体一些。 向已经包含各种小部件的NetBeans项目添加JFreeChart的正确方法是什么? My 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();
    }
    
    1 回复  |  直到 15 年前
        1
  •  8
  •   camickr    15 年前

    My updateChart()隐藏整个 JFrame公司。

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

    这可能是因为您正在用自由图表中的面板替换框架的内容窗格。

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

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

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

    推荐文章