title: How to update/refresh JPanel on JButton click?
body: <p>I am trying to plot a graph and graph should display when <code>JButton</code> is clicked. To create data set, I am taking some value through <code>JTextField</code> and then created a chart and plotted it. I've got 2 problems: </p>
  
  <ol>
  <li>The chart becomes visible after resizing the window and </li>
  <li>the chart doesn't refresh when I change the text field value. </li>
  </ol>
  
  <p>Here is my program:</p>
  
  <pre><code>public class Test extends JFrame {
  
  private JPanel contentPane;
  private JTextField textField;
  private ChartPanel chartPanel;
  
  public Test() {
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setBounds(100, 100, 450, 300);
  contentPane = new JPanel();
  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  contentPane.setLayout(new BorderLayout(0, 0));
  setContentPane(contentPane);
  
  JPanel panel = new JPanel();
  contentPane.add(panel, BorderLayout.WEST);
  panel.setLayout(new MigLayout("", "[][grow]", "[][][][][]"));
  
  JLabel lblA = new JLabel("a");
  panel.add(lblA, "cell 0 2,alignx trailing");
  
  textField = new JTextField();
  panel.add(textField, "cell 1 2,growx");
  textField.setColumns(10);
  
  JButton btn = new JButton("Plot");
  btn.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
          double a= Double.parseDouble(textField.getText());
          chartPanel = createChart(a);
          contentPane.add(chartPanel, BorderLayout.CENTER);  
      }
  });
  panel.add(btn, "cell 1 4");
  }
  
  // Create ChartPanel
  private ChartPanel createChart(double a) {
  
  XYDataset dataset = createDataset(a);
  JFreeChart chart = ChartFactory.createXYLineChart("title", "X", "Y",
      dataset, PlotOrientation.VERTICAL, true, true, false);
  return new ChartPanel(chart);
  }
  
  // Create Dataset
  private XYDataset createDataset(double a) {
  int x[] = { 1, 2, 3, 4, 5 };
  int y[] = { 1, 4, 9, 16, 25 };
  
  XYSeries s1 = new XYSeries("test");
  for (int i = 0; i &lt; y.length; i++) {
      s1.add(a*x[i], y[i]);
  }
  
  XYSeriesCollection dataset = new XYSeriesCollection();
  dataset.addSeries(s1);
  return dataset;
  }
  
  //Main Mathed: skipped.
  
  }
  </code></pre>