title: Java, How to refresh JTable in one frame from another frame
body: <p>So I have a MainFrame class which has a JTable in it, listing all Products stored in DB. The JButton with the help of listeners will open AddProduct (another class, and another window/frame) in which I can add product in the DB. Unfortunately, I'm not exactly sure how can I update/revalidate JTable in MainFrame once AddProduct adds new product and autocloses.
  Could some please give me some idea as how can I easily resolve this?</p>
  
  <p>Since program is rather large, here are relevant parts of it:
  From MainFrame.java</p>
  
  <pre><code>public JPanel tabProducts() {
      JPanel panel = new JPanel(new MigLayout("","20 [grow, fill] 10 [grow, fill] 20", "20 [] 10 [] 20"));
  
      /** Labels **/
      JLabel label = new JLabel("List of all available products");
  
      /** Buttons **/
      JButton add = new JButton("Add product");
      add.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
              new AddProduct();
          }
      });
      JButton update = new JButton("Update product");
      update.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
              new UpdateProduct(ps.getProductByID(15));
          }
      });
  
      /** TABLE: Products **/
      String[] tableTitle = new String[] {"ID", "Name", "Type", "Price", "In stock"};
      String[][] tableData = null;
      DefaultTableModel model = new DefaultTableModel(tableData, tableTitle);
      JTable table = null;
      /** Disable editing of the cell **/
      table = new JTable(model){
          public boolean isCellEditable(int r, int c) {
              return false;
          }
      };
      /** Load the products from DB **/
      List&lt;Product&gt; listInv = ps.getProductsByAtt(new ArrayList&lt;String&gt;());
      for (int i = 0; i &lt; listInv.size(); i++) {
          model.insertRow(i, new Object[] {
                  listInv.get(i).getID(),
                  listInv.get(i).getName(),
                  listInv.get(i).getType(),
                  listInv.get(i).getPrice(),
                  listInv.get(i).getQuantity()
          });
      }
      /** Add scroll pane **/
      JScrollPane scrollpane = new JScrollPane(table);
  
      /** Add everything to the panel **/
      panel.add(label, "wrap, span");
      panel.add(scrollpane, "wrap, span");
      panel.add(add);
      panel.add(update);
  
      return panel;
  }
  </code></pre>
  
  <p>And AddProduct.java</p>
  
  <pre><code>public class AddProduct {
  
      private JFrame frame;
      private JButton add, cancel;
      private JRadioButton food, beverage;
      private JTextField name, price, quantity;
      private IProductService ps = new ProductService();
      private ButtonGroup group = new ButtonGroup();
      private Product p;
      private String type = "";
  
      public AddProduct() {
          /** Frame options **/
          frame = new JFrame("Add new product");
          frame.setSize(400, 280);
          frame.setMinimumSize(new Dimension(400, 280));
          frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
  
          /** Default panel **/
          final JPanel panel = new JPanel(new MigLayout("","20 [grow, fill] 10 [grow, fill] 20", "20 [] 10 [] 20"));
  
          /** Radio Buttons to choose between the food and the beverages **/
          food = new JRadioButton("Food");
          beverage = new JRadioButton("Beverage");
          group.add(food);
          group.add(beverage);
          food.addActionListener(new ActionListener(){
              @Override
              public void actionPerformed(ActionEvent e) {
                  type = "Food";
                  frame.validate();
              }
          });
          beverage.addActionListener(new ActionListener(){
              @Override
              public void actionPerformed(ActionEvent e) {
                  type = "Beverage";
                  frame.validate();
              }
          });
  
          /** Add everything to the panel **/
          panel.add(new JLabel("Product ID"));
          panel.add(new JLabel(Integer.toString(ps.getProductNr()+1)), "wrap, span 2");
          panel.add(new JLabel("Name"));
          panel.add(name = new JTextField(""), "wrap, span 2");
          panel.add(new JLabel("Type"));
          panel.add(food);
          panel.add(beverage, "wrap");
          panel.add(new JLabel("Price"));
          panel.add(price = new JTextField(""), "wrap, span 2");
          panel.add(new JLabel("Quantity"));
          panel.add(quantity = new JTextField(""), "wrap, span 2");
  
  
          /** Button: ADD **/
          add = new JButton("Add product");
          add.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
  
                  if ( !type.equals("Food") &amp;&amp; !type.equals("Beverage")) {
                      JOptionPane.showMessageDialog(panel, "Please choose the type of this product.");
                  } else if (name.getText().equals("")) {
                      JOptionPane.showMessageDialog(panel, "Please type a name for this product.");
                  } else if (price.getText().equals("")) {
                      JOptionPane.showMessageDialog(panel, "Please enter the price for this product.");
                  } else if (quantity.getText().equals("")) {
                      JOptionPane.showMessageDialog(panel, "Please enter the available amount of this product in stock.");
                  } else {
                      try {
                          p = new Product(ps.getProductNr()+1, name.getText(), type, Double.parseDouble(price.getText()), Integer.parseInt(quantity.getText()));
                          if (ps.addProduct(p)) {
                              JOptionPane.showMessageDialog(panel, "Product successfully added!");
                              frame.validate();
                              frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
                          }
                      } catch (Exception ex) {
                          addFinalError();
                      }
                  }
              }
          });
  
          /** Button: CANCEL **/
          cancel = new JButton("Cancel");
          cancel.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                  frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
              }
          });
  
          /** Add buttons to the panel **/
          panel.add(cancel);
          panel.add(add, "span 2");
  
          /** Add panel to frame and make it visible **/
          frame.add(panel);
          frame.setVisible(true);
  
      }
  
      /**
       * In case more then one error is encountered
       */
      private void addFinalError(){
          JOptionPane.showMessageDialog(frame, "An error occured while adding the product. Please make sure the following is correct:\n\n" +
                  " Name  : Can contain letters and numbers\n" +
                  " Price  : Must be a number\n" +
                  " Quantity  : Must be a whole number\n");
      }
  }
  </code></pre>