我必须将从文件选择器返回的数据表示为图表。一切正常,直到我再次按下按钮并选择一个不同的文件。问题是,它不是代表新数据集,而是将它添加到前一个数据集中。我尝试了revalidate
,repaint
和remove
方法,但没有任何效果(或者我不知道将这些方法放在哪里。
我的代码如下所示:
JButton theButton = new JButton("Choose the file");
theButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
int returnValue = fileChooser.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
theFile = fileChooser.getSelectedFile();
try {
ReadGCFile.readGCList(theFile, gcArrayList,
gcStringList, gcDateList);
} catch (NumberFormatException | IOException
| ParseException e) {
System.out.println("Something's wrong.");
}
try {
frame1 = createCharts.createBarChart();
desktopPane.add(frame1);
frame1.pack();
frame1.setVisible(false);
frame1.setBounds(460, 50, 1260, 1000);
frame2 = createCharts.combinedBarAndLineChart();
desktopPane.add(frame2);
frame2.pack();
frame2.setVisible(false);
frame2.setBounds(460, 50, 1200, 1000);
frame3 = createCharts.createGCLineChart();
desktopPane.add(frame3);
frame3.pack();
frame3.setVisible(false);
frame3.setBounds(460, 50, 1200, 1000);
} catch (IOException | ParseException e) {
System.out.println("Something's wrong.");
}
}
//frame1.getContentPane().repaint();
//frame2.getContentPane().repaint();
//frame3.getContentPane().repaint();
}
});
desktopPane.add(theButton);
theButton.setVisible(true);
theButton.setBounds(20, 100, 250, 20);
getContentPane().add(theButton);
有人可以帮我吗?
答案 0 :(得分:2)
应该重新考虑这种方法:不要替换组件; 更新到位。如果您更新图表的数据集,则监听图将作为响应自行更新,如here所示。
在DefaultCategoryDataset
的特定情况下,clear()
方法可能允许您重用现有实例;对于其他人来说,创建一个新的实例可能更容易。