Note that there are some explanatory texts on larger screens.

plurals
  1. POJava, How to refresh JTable in one frame from another frame
    text
    copied!<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>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload