title: Update JTable using JButton
body: <p>I am trying to include a refresh button on a Swing library interface, the purpose of the button is to refresh the the contents of a <code>JTable</code> after a Add/Delete/Update query has been called. I've done some research and seen that the <code>tableDataChanged()</code> from the <code>AbstractTableModel</code> class. The problem is I'm not sure where this should be called. I'm using the <code>DefaultTableModel</code>, so I believe this method can also be used.</p>
  
  <pre><code>/*This is where I create the query and add the JTable to a scrollPane, an ResultsPanel
   object is then added to a JFrame object*/
  
  
  
  
   public class SitePanel extends JPanel implements Constants  {
   ResultsPanel resultsPanel = new ResultsPanel();
     JTable table;
     DefaultTableModel model;
     JPanel sitePanel = new JPanel();
     JPanel results = new JPanel();
  
     public SitePanel(){
  addComponents();
  }
  
  public void addComponents(){
      sitePanel.setLayout(new BorderLayout());
      sitePanel.add(buttonPanel, BorderLayout.NORTH);
      sitePanel.add(resultsPanel, BorderLayout.CENTER);
      sitePanel.setVisible(true);
      add(new JScrollPane(sitePanel));
  }
  
   class ButtonPanel extends JPanel{
   JPanel buttons = new JPanel();
  
         public ButtonPanel(){
        buttons.setLayout(new FlowLayout());
        buttons.add(refreshButton);
        show();
        buttons.setVisible(true);
        add(buttons);
  
      }
    public void show(){
  
    refreshButton.addActionListener(new ActionListener(){
     @Override
              public void actionPerformed(ActionEvent arg0) {
                  new ResultsPanel();
                  table.setModel(model);
              }
          }
                  );
   }
   public class ResultsPanel extends JPanel{
  
  
       public ResultsPanel(){
  
          execute();
          results.add(scrollPane);
          javax.swing.SwingUtilities.invokeLater(new Runnable(){
              public void run(){
                  results.setBorder(greenB);
                  results.setToolTipText("Results");
                  results.setVisible(true);
                  add(results);
  
              }
          });
      }
  
          public void execute() {
          Vector columnNames = new Vector();
          Vector data = new Vector();
  
          try{
              Connection conn = Connect.getConnection();
              String query = "Select Name from Location Order By Name";
              Statement stmt = conn.createStatement();
              ResultSet rs = stmt.executeQuery(query);
              ResultSetMetaData md = rs.getMetaData();
              int columns = md.getColumnCount();
  
              for (int i=1; i&lt;=columns;i++){
                  columnNames.addElement(md.getColumnName(i));
              }       
              while (rs.next()){
                  Vector row = new Vector(columns);
  
                  for(int i=1; i&lt;=columns;i++){   
                      row.addElement(rs.getObject(i));
                  }
                  data.addElement(row);
              }
              rs.close();
              stmt.close();
              conn.close();
          }
          catch (Exception e){
              e.printStackTrace();
          }
          model = new DefaultTableModel(data, columnNames);
  
          model.addTableModelListener(table);
          table = new JTable(model){
              public boolean isCellEditable(int row, int col){
                  return false;
              }
  
              public Class getColumnClass(int column){
                  for (int row=0; row&lt;getRowCount();row++){
                      Object o = getValueAt(row, column);
  
                      if(o!=null){
                          return o.getClass();
                      }
                  }
                  return Object.class;
              }
          };
  
          scrollPane = new JScrollPane(table);
          scrollPane.setBorder(border);
          scrollPane.getVerticalScrollBar().setBackground(Color.LIGHT_GRAY);
      }
  }
  
             }
  </code></pre>
  
  <p>This is the class with the main method.</p>
  
  <pre><code>import java.net.URL;
  import java.sql.*;
  import javax.swing.*;
  
  
  
   public class Connect extends JFrame{
  
  public static String user = null;
  public static String password = null;
  static Connection conn = null;
  
  public static void loginGUI() throws Exception{
      JPasswordField passwordField = new JPasswordField();
      JTextField userField = new JTextField();
      passwordField.setEchoChar('*');
      Object[] obj = {"Username:\n", userField, "Password:\n", passwordField};
      Object stringArray[] = {"OK", "Cancel"};
      if(JOptionPane.showOptionDialog(null, obj, "Login", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, stringArray, obj)==JOptionPane.YES_OPTION);
      password = new String (passwordField.getPassword());
      user = userField.getText();
      Conn.formConnection();
  
  
  }
  
  
  
  public static void main (String[] args) throws Exception{
              javax.swing.SwingUtilities.invokeLater(new Runnable(){
          public void run(){
              try {
                                      Connect.loginGUI();
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      });
  }
  /**
   * Static connection class can only be created once at any given time.
   * @author Nosheen Mahate
   *
   */
  public static class Conn{
  
      public static Connection formConnection() throws Exception{
          try{
              String driver = "net.sourceforge.jtds.jdbc.Driver";
              String url = "jdbc:jtds:sqlserver://BHX4DT-4FPQ35J:1433/Forecast;instance=SQLEXPRESS" +
                      ";user=" +user +";password="+ password +";ssl=request;Encrypt=true;TrustServerCertificate=true";
              Class.forName(driver);
              conn = DriverManager.getConnection(url, user, password);
  
              try{
                  password = null;
                  JFrame frame = new JFrame();
                                                frame.add(new SitePanel());
                                                frame.pack();
                                                frame.setVisible(true);
              }
              catch (Exception e){
                  System.exit(1);
                  JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);
  
  
                  e.printStackTrace();
  
              }
          }
          catch (Exception e){
              if(password != null || user !=null){
                  JOptionPane.showMessageDialog(null, e, "Error",      JOptionPane.ERROR_MESSAGE);
              }
              else{
              System.exit(1);
  
              }
              System.out.println("No Connection");
          }
  
          return conn;
  
      }
      /**
       * Used to check that the connection is still established
       */
  }
  public static Connection getConnection(){
      return conn;
  }
  
  /**
   * Close the connection to the server
   * @throws SQLException
   */
  public static void closeConnection() throws SQLException{
      conn.close();
      conn = null;
  }
  }
  </code></pre>
  
  <p>I know there's quite a bit of code there but I wasn't too sure what you might need. 
  Just to rerun I wanted to know how to update the <code>JTable</code> after clicking the <code>JButton</code>, and where the <code>fireTableDataChanged()</code> method should (if needed) be called.</p>