Как отобразить JFreeChart в проекте NetBeans - PullRequest
6 голосов
/ 19 октября 2010

Это похоже на вопрос, который я задал вчера, но более конкретно к проблеме.Как правильно добавить 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();
}

1 Ответ

8 голосов
/ 19 октября 2010

My updateChart () скрывает весь JFrame.

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

Это происходит потому, что вы заменяете панель содержимого вашего фрейма панелью из свободной диаграммы.

Я не знаю, какой менеджер компоновки вы используете, но вам нужно «ДОБАВИТЬ» бесплатную панель диаграмм в панель, которая содержит все остальные компоненты. Поэтому, возможно, когда вы разрабатываете общую форму в Netbeans, вы добавляете пустую панель в то место, куда вы хотите добавить панель бесплатных диаграмм. Тогда, когда вы добавите панель свободных графиков, код будет выглядеть примерно так:

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

Проверка сообщает Swing, что компоненты были добавлены, поэтому будет вызван менеджер компоновки.

...