2
我使用JFreeChart在柱狀圖中顯示一些簡單的數據。我在將數據集加載到圖表並顯示數據時沒有問題,但是當我嘗試使用複選框對數據進行排序時,我的問題就出現了。選中時,應顯示來自year2001
的數據,如果取消選中,應顯示來自所有年份的數據。從執行println,我可以看到複選框正在工作,並且來自Persons.getPersons().getCountSuccessYesMale()
的數據已更改,但圖表未重新加載新數據。這裏有什麼問題?jFreeChart刷新數據集問題
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);
}
}
事件監聽其打電話的時候複選框有變化狀態的更新方法:
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()時的問題是複選框(checked/unchecked)的狀態被刪除。我怎樣才能刪除/更新數據集? – jorgen 2011-03-28 12:46:01
而不是每次創建一個新的數據集,創建一次,然後清除並添加新的值。 – jzd 2011-03-28 12:48:36
是的!不能相信我以前沒有這樣做!非常感謝! – jorgen 2011-03-28 12:55:33