Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jFreeChart重新加载数据集问题_Java_Swing_Jfreechart_Actionlistener - Fatal编程技术网

Java jFreeChart重新加载数据集问题

Java jFreeChart重新加载数据集问题,java,swing,jfreechart,actionlistener,Java,Swing,Jfreechart,Actionlistener,我使用JFreeChart在柱状图中显示一些简单数据。我在将数据集加载到图表中并显示数据方面没有问题,但是当我尝试使用复选框对数据进行排序时,我的问题就出现了。选中时,应显示2001年的数据;取消选中时,应显示所有年份的数据。通过执行println,我可以看到复选框正在工作,并且来自Persons.getPersons().getCountSuccessYesMale()的数据已更改,但图表没有重新加载新数据。这里怎么了 public class ChartColumn extends JPan

我使用JFreeChart在柱状图中显示一些简单数据。我在将数据集加载到图表中并显示数据方面没有问题,但是当我尝试使用复选框对数据进行排序时,我的问题就出现了。选中时,应显示2001年的数据;取消选中时,应显示所有年份的数据。通过执行println,我可以看到复选框正在工作,并且来自
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();


        } 
    }

看起来您没有删除旧图表。在更新方法中调用removeAll(),或者只更新图表的数据集,而不是再次重建图表。

是的,这几乎可以正常工作。使用removeAll()时的问题是复选框(选中/未选中)的状态被删除。如何仅删除/更新数据集?不是每次创建新数据集,而是创建一次,然后清除并向其中添加新值。是!真不敢相信我之前没想到!谢谢!你能粘贴你的最终代码吗?我也可以用它来解决我的问题。