Как добавить и вычесть значение суммы после добавления / удаления строки из JTable - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть код для добавления и удаления одной строки для моего JTable, но это вызывает проблемы, такие как не точное вычисление общей суммы и вычитания после удаления ее из JTable. JTable служит «корзиной» для добавления и удаления товаров в корзине.

Кнопка add to cart для добавления строки в корзину:

if (e.getSource() == movebutton) {
        TableModel model1 = productTable.getModel();
        int index[] = productTable.getSelectedRows();
        Object[] row = new Object[4];
        DefaultTableModel model2 = (DefaultTableModel) cartTable.getModel();

        for (int i = 0; i < index.length; i++) {
            row[0] = model1.getValueAt(index[i], 0);
            row[1] = model1.getValueAt(index[i], 1);
            row[2] = model1.getValueAt(index[i], 2);
            model2.addRow(row);
            getSum();
        }

Код где добавляются общие элементы:

public void getSum() {  //column 02 is where the item's prices are listed
    for (int i = 0; i < cartTable.getRowCount(); i++) {
        total += Double.parseDouble(cartTable.getValueAt(i, 2).toString()); 
    }
    cartAmount.setText("Total: P " + Double.toString(total));
}

}

Код кнопки remove an item from the cart:

 try {
            for (int i = 0; i < cartTable.getRowCount(); i++) {
                total = total - Double.parseDouble(cartTable.getValueAt(i, 2).toString());
            }
            cartAmount.setText("Total: P " + Double.toString(total));
            if (total <= 0.0) {
                total = 0.0;
            }
            {
                int getSelectedRowForDeletion = cartTable.getSelectedRow();
                model2.removeRow(getSelectedRowForDeletion);
                JOptionPane.showMessageDialog(null, "Item removed from cart");
            }
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
        } catch (ArrayIndexOutOfBoundsException ex) {
        }
    }

Вот некоторые фотографии при добавлении и удалении элемента: enter image description here

enter image description here

enter image description here

Как я также могу сделать Удалить кнопку, чтобы не работать, когда ни одна строка не выбрана? Как попросить пользователя выбрать строку перед удалением? Также исключите возможность расчета отрицательной суммы. Спасибо

1 Ответ

0 голосов
/ 11 апреля 2020

Я решил:

Кнопка добавления в корзину:

 if (e.getSource() == movebutton) {
        try {
            int index[] = productTable.getSelectedRows();
            Object[] row = new Object[4];

            for (int i = 0; i < index.length; i++) {
                row[0] = model.getValueAt(index[i], 0);
                row[1] = model.getValueAt(index[i], 1);
                row[2] = model.getValueAt(index[i], 2);
                model2.addRow(row);
            }
            DefaultTableModel t = (DefaultTableModel) productTable.getModel();
            int selectedRow = productTable.getSelectedRow();
                {
                    total += Double.parseDouble(t.getValueAt(selectedRow, 2).toString());
                }
                cartAmount.setText("Total: P " + Double.toString(total));
            }catch (ArrayIndexOutOfBoundsException a) {
        }
    }

Кнопка удаления:

if (e.getSource() == remove) {
        try {
            DefaultTableModel t = (DefaultTableModel) cartTable.getModel();
            int getSelectedRowForDeletion = cartTable.getSelectedRow();
            if (getSelectedRowForDeletion >= 0) {
                int selectedRow = cartTable.getSelectedRow();
                total -= Double.parseDouble(t.getValueAt(selectedRow, 2).toString());
                cartAmount.setText("Total: P " + Double.toString(total));
                model2.removeRow(getSelectedRowForDeletion);
                JOptionPane.showMessageDialog(null, "Item removed from cart!");
            } else {
                JOptionPane.showMessageDialog(null, "Select an item to remove.");
            }
        } catch (ArrayIndexOutOfBoundsException a) {
        }
    }

Я удалил для l oop, когда добавление значений, так как это просто добавит следующий элемент в productTable. То же самое касается кнопки удаления.

...