jCombobox дает ошибку добавочного значения в jTable

У меня проблемы с моим кодом ниже, код ниже показывает заполняемый jComboBox, когда я выбираю элемент из этого списка, он добавляется в jTable под ним.

Также есть код для проверки дубликатов записей в таблице. Если обнаружена повторяющаяся запись, она должна увеличить столбец количества на единицу, а не создавать отдельную запись.

Вот тут-то и возникает проблема: когда я нажимаю кнопку «Назад» на этом экране и перехожу на другой экран, а затем возвращаюсь по тому же маршруту, что и в первый раз, я получаю постепенно отличающееся количество, добавляемое в строку/ячейку таблицы.

Я также включил код, который заполняет сведения о раунде в зависимости от раунда, выбранного из таблицы, для справки, но я совершенно уверен, что проблема заключается в приведенном ниже коде. Навигация такая...

Чтобы перейти к приведенному ниже экрану... Таблица круглых капель на панели Round Drop) >> щелкните строку таблицы и перейдите на соответствующую панель сведений о раунде >> нажатие кнопки Till переводит пользователя на экран с кодом ниже...

Результаты теста:

Первый проход по приведенному ниже коду с использованием приведенной выше навигации дает ожидаемые результаты.

Второй проход дает начальное значение 2 (вместо одного), а повторяющаяся строка увеличивает количество на 2 вместо одного.

Третий проход дает начальное значение 3 (вместо одного), а повторяющаяся строка увеличивает количество на 3 вместо одного.

Четвертый проход дает начальное значение 4 (вместо одного), а повторяющаяся строка увеличивает количество на 4 вместо одного.

...и так далее.

Будем очень признательны за любую помощь, руководство по решению или лучший дизайн.

Спасибо

/*************Пример кода *********** *************** ******/ public voidillOperations(String sourceCall) {

    final DefaultTableModel model = (DefaultTableModel)main.tillPanel.tblTillSale.getModel();
    if (main.tillPanel.cmbTillProdSelect.getItemCount() < 1) {
        for (int d = 0; d < roundStockObj.length ; d++) {
            main.tillPanel.cmbTillProdSelect.addItem(roundStockObj[d].getDescription());
        }}
    main.tillPanel.tblTillSale.removeRowSelectionInterval(0, model.getRowCount() - 1);

    main.tillPanel.cmbTillProdSelect.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent f)
        {
            int qty = 1;
            for (int index = 0; index < 4; index++) {
                addSelectedItem[index] = "";
            }
            int row;
            selectedItem = null;
            main.tillPanel.tblTillSale.removeRowSelectionInterval(0, model.getRowCount() - 1);
            selectedItem = main.tillPanel.cmbTillProdSelect.getSelectedItem();

            for (int d = 0; d < roundStockObj.length; d++) {

                if (selectedItem.equals(roundStockObj[d].getDescription())) {    
                    addSelectedItem[0] = roundStockObj[d].getDescription();
                    addSelectedItem[1] = Integer.toString(qty);
                    addSelectedItem[2] = Double.toString(roundStockObj[d].getPrice()).trim();
                    addSelectedItem[3] = Double.toString(roundStockObj[d].getPrice()).trim();
                    //break;
                }
            }

            if(model.getRowCount() == 0) { //check if model is empty
                model.addRow(new String[]{addSelectedItem[0], addSelectedItem[1], addSelectedItem[2], addSelectedItem[3]});
            }
            else { //check if there is a duplicate row
                int duplicateRow = -1;
                for (row = 0 ; row < model.getRowCount(); row++) {
                    if(addSelectedItem[0].equals(main.tillPanel.tblTillSale.getModel().getValueAt(row,0))) {
                        duplicateRow = row;
                        break;
                    }
                }

                if(duplicateRow == -1) { //if there is no duplicate row, append
                    model.addRow(new String[]{addSelectedItem[0], addSelectedItem[1], addSelectedItem[2], addSelectedItem[3]});
                }
                else { //if there is a duplicate row, update
                    main.tillPanel.jLabel1.setText(addSelectedItem[1]);
                    DecimalFormat fmtObj = new DecimalFormat("####0.00");
                    int currentValue = Integer.parseInt(main.tillPanel.tblTillSale.getValueAt(row, 1).toString().trim());
                    int newValue = currentValue + 1;
                    Integer newValueInt = new Integer(newValue);
                    model.setValueAt(newValueInt, row, 1);

                    double unitPrice = Double.parseDouble(main.tillPanel.tblTillSale.getValueAt(row, 2).toString().trim());
                    double newPrice = newValue * unitPrice;
                    Double newPriceDbl = new Double(newPrice);
                    main.tillPanel.tblTillSale.setValueAt(fmtObj.format(newPriceDbl), row, 3);
                }
            }

            main.tillPanel.tblTillSale.removeRowSelectionInterval(0, model.getRowCount() - 1);
            for (int index = 0; index < 4; index++) {
                addSelectedItem[index] = "";
            }
        }
    });

//Этот код загружает конкретные детали раунда на основе выбора из таблицы раундов

public void displayRoundDropDetails() {
    DefaultTableModel model = (DefaultTableModel)main.selectRoundDropPanel.tblSelectRoundDrop.getModel();

    if (!loaded) {
    for (int d = 0; d < roundDropsData.length; d++) {
        if (roundDropsData[d][0].equals(defaultRoundID)) {
            model.addRow(new Object[]{roundDropsData[d][3], roundDropsData[d][2],
                    roundDropsData[d][4], roundDropsData[d][5]});
        }
    }
    loaded = true;
    }
    main.selectRoundDropPanel.tblSelectRoundDrop.addMouseListener(new MouseAdapter()
    {
        public void mouseClicked(MouseEvent evt)
        {
            int row = 0;
            row = main.selectRoundDropPanel.tblSelectRoundDrop.getSelectedRow();
            for (int index = 0; index < roundDropsData.length; index++) {
                if (roundDropsData[index][3].equals(
                        main.selectRoundDropPanel.tblSelectRoundDrop.getModel().getValueAt(row, 0))) {

                    main.roundDetailsPanel.txtRoundDetailsAddress.setText(roundDropsData[index][6] + "\n"
                            + roundDropsData[index][7] + ", " + roundDropsData[index][8] + "\n" +
                            roundDropsData[index][9]);

                    main.roundDetailsPanel.lblRoundDetailsName.setText(roundDropsData[index][2]);
                    main.roundDetailsPanel.txtRoundDetailsInstuct.setText(roundDropsData[index][10]);
                    main.roundDetailsPanel.txtDropDetailsIn.setText(roundDropsData[index][4]);
                    main.roundDetailsPanel.txtDropDetailsOut.setText(roundDropsData[index][5]);
                    main.roundDetailsPanel.txtRoundDetailsInstruct.setText(roundDropsData[index][12]);
                    break;
                }
            }
        Globals.CURRENT_COMPONENT = "selectRoundDropPanel";
        showRoundDetailsPanel();
        }
    });
}

person user5980196    schedule 11.03.2011    source источник


Ответы (1)


Попробуйте изменить прослушиватель для JComboBox. попробуйте использовать stateChangeListener.

person Samra    schedule 11.03.2011
comment
Не уверен, как это поможет, как если бы это была проблема, первый выбор также сработал бы дважды, не так ли? - person user5980196; 11.03.2011