打开新文件时刷新图表

时间:2015-12-08 14:01:36

标签: java swing jbutton jfreechart jfilechooser

我必须将从文件选择器返回的数据表示为图表。一切正常,直到我再次按下按钮并选择一个不同的文件。问题是,它不是代表新数据集,而是将它添加到前一个数据集中。我尝试了revalidaterepaintremove方法,但没有任何效果(或者我不知道将这些方法放在哪里。

我的代码如下所示:

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);

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

应该重新考虑这种方法:不要替换组件; 更新到位。如果您更新图表的数据集,则监听图将作为响应自行更新,如here所示。

image

DefaultCategoryDataset的特定情况下,clear()方法可能允许您重用现有实例;对于其他人来说,创建一个新的实例可能更容易。