jCombobox在jTable上给出增量值错误

时间:2011-03-11 10:46:18

标签: loops jtable jcombobox

我的代码出现问题,下面的代码显示正在填充的jComboBox,当我从这个列表中选择一个项目时,它会被添加到它下面的jTable中。

有alos代码检查表上的重复条目。如果找到重复条目,则应将qty列增加1,而不是创建单独的条目。

这就是问题出现的地方,当我按下此屏幕上的后退按钮并转到另一个屏幕,然后通过相同的路线返回时,我得到一个逐渐增加的不同的数量添加到表格行/细胞

我还包括根据从表中选择的Round Drop填充Round Details的代码,以供参考,但我相当确定问题出在下面的代码中。导航如下......

要进入下面的屏幕...圆形投影的圆形投影面板表>>点击表格行并转到相关的圆形细节面板>>按下Till按钮,用户可以使用以下代码进行屏幕显示...

测试结果:

首先使用上面的导航通过以下代码,按预期显示结果

第二遍给出初始值2(而不是1),重复行将qty增加2而不是一个

第三遍给出初始值3(而不是一),重复行将数量增加3而不是一个

第四遍给出的初始值为4(而不是一),重复的行将数量增加4而不是一个

......等等。

任何帮助,解决方案指导或更好的设计都将受到极大的赞赏。

由于

/ * ** * ** * ** * ** * 代码示例 ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** /     public void tillOperations(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();
        }
    });
}

1 个答案:

答案 0 :(得分:0)

尝试更改JComboBox的侦听器。尝试使用stateChangeListener。