jFreeChart проблема перезагрузки набора данных - PullRequest
2 голосов
/ 28 марта 2011

Я использую JFreeChart , чтобы отобразить некоторые простые данные в столбчатой ​​диаграмме. У меня нет проблем с загрузкой набора данных в диаграмму и отображением данных, но моя проблема возникает, когда я пытаюсь использовать флажки для сортировки данных. Если этот флажок установлен, должны отображаться данные из year2001, а при снятии отметки должны отображаться данные за все годы. После выполнения печати я вижу, что флажки работают и что данные из Persons.getPersons().getCountSuccessYesMale() изменены, но диаграмма не перезагружает новые данные. Что здесь не так?

public class ChartColumn extends JPanel {

private JCheckBox year2001;
private JCheckBox year2002;
private EventListener eventListener;
private int successMale;

public ChartColumn(EventListener eventListener) {
    this.eventListener = eventListener;
}

public void update() {
    this.createChart(this.createDataset());
    this.showSelectionControl();
}

private CategoryDataset createDataset() {

    DefaultCategoryDataset dataset = new DefaultCategoryDataset();

    dataset.addValue(Persons.getPersons().getCountSuccessYesMale(), "Success", "MALE");
    dataset.addValue(Persons.getPersons().getCountSuccessNoMale(), "Fail", "MALE");
    dataset.addValue(Persons.getPersons().getCountSuccessYesFemale(), "Success", "FEMALE");
    dataset.addValue(Persons.getPersons().getCountSuccessNoFemale(), "Fail", "FEMALE");

    return dataset;

}

public void createChart(CategoryDataset dataset) {

    JFreeChart chart =
            ChartFactory.createBarChart3D(
            "Comparison between Male and Female in attending Meetings",
            "Person Comparisons",
            "No of Persons",
            dataset,
            PlotOrientation.VERTICAL,
            true,
            true,
            false);

    ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new Dimension(600, 300));

    this.add(chartPanel);

}

public void showSelectionControl() {

    year2001 = new JCheckBox("2001");
    year2001.setMnemonic(KeyEvent.VK_C);
    year2001.setSelected(true);
    year2001.setActionCommand("2001");
    year2001.addActionListener((ActionListener) this.eventListener);

    year2002 = new JCheckBox("2002");
    year2002.setMnemonic(KeyEvent.VK_G);
    year2002.setSelected(true);
    year2002.setActionCommand("2002");
    year2002.addActionListener((ActionListener) this.eventListener);

    this.add(year2001);
    this.add(year2002);
}
}

Eventlistener, который вызывает метод обновления, когда флажок имеет статус изменения:

 class TabbedPaneEvent implements ActionListener {

    public void actionPerformed(ActionEvent actionEvent) {
         if (actionEvent.getActionCommand().equals("2001")) {
            AbstractButton abstractButton = (AbstractButton)actionEvent.getSource();
            boolean selected = abstractButton.getModel().isSelected();

            if(selected == true){
                Persons.setYear(1);
            } else if(selected == false){
                Persons.setYear(0);
            }


            Persons.calculateChartData();
            chartColumn.update();


        } 
    }

1 Ответ

4 голосов
/ 28 марта 2011

Похоже, вы не удаляете старый график. Либо вызовите removeAll () в вашем методе обновления, либо просто обновите набор данных диаграммы вместо того, чтобы заново перестраивать диаграмму.

...