Мне нужно вставить новые продукты в JTable, чтобы после нажатия кнопки «Добавить продукт» таблица должна обновить новые данные. Все продукты записываются в файл и считываются из него при печати таблицы. Проблема в том, что моя таблица остается неизменной и только после выхода из приложения GUI и ввода снова я вижу новый обновленный JTable.JScrollPane не обновляется должным образом
Вот соответствующий код из класса GUI:
private class ManageProductsListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
...
addProductBtn.addActionListener(new AddProductListener());
removeProductBtn.addActionListener(new RemoveProductListener());
manageProductsPanel.add(warehouse);
manageProductsPanel.setVisible(true);
finalPanel.add(manageProductsPanel, BorderLayout.CENTER);
}
}
private class AddProductListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
...
manageProductsPanel.remove(warehouse);
Product product = new Product(insertProductName.getText(), Integer.parseInt(insertPrice.getText()), Integer.parseInt(insertStock.getText()));
warehouse.addProduct(product);
warehouse.writeFile();
warehouse.printProducts();
manageProductsPanel.add(warehouse);
...
}
}
А вот часть из класса Склад:
public class Warehouse extends JPanel {
...
private TreeSet<Product> products = new TreeSet<Product>();
private JTable productsTable;
private Object[][] data;
private String[] columns = {"Product name", "Price", "In stock", "Understock", "Overstock"};
public Warehouse() {
}
public void addProduct(Product newProduct) {
products.add(newProduct);
}
public void writeFile() {
try {
FileOutputStream fos = new FileOutputStream("products.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Iterator<Product> i = products.iterator();
while (i.hasNext()) {
oos.writeObject(i.next());
}
oos.close();
} catch (IOException i) {
i.printStackTrace();
}
}
public void readFile() {
...
}
public void printProducts() {
data = new Object[products.size()][5];
Iterator<Product> iterator = products.iterator();
int i = 0;
while (iterator.hasNext()) {
Product p = iterator.next();
data[i][0] = p.getProductName();
data[i][1] = p.getPrice();
data[i][2] = p.getStock();
data[i][3] = p.checkUnderstock();
data[i][4] = p.checkOverstock();
i++;
}
createTable();
}
public void createTable() {
productsTable = new JTable(data, columns);
productsTable.setPreferredScrollableViewportSize(new Dimension(600, 200));
productsTable.setFillsViewportHeight(true);
JScrollPane scroll = new JScrollPane(productsTable);
add(scroll);
}
Любая помощь будет оценена. Заранее спасибо!
Да, я пробовал, но когда я называю этот метод я получаю новые таблицы.Например, если я добавляю новый продукт, появляется новая таблица; если я добавлю новый продукт, появится еще одна новая таблица и т. д. Новые таблицы даже не вписываются в панель – Dave
Это похоже на то, что по вашему методу createTable вы добавляете новую таблицу, но не удаляете более старую. – Renatols
Как удалить старый? – Dave