当前位置: 首页 > 知识库问答 >
问题:

在一条记录之后,在Java表中递增一个值不起作用

刘明朗
2023-03-14

当在数据模型表中插入行时,对于第一条记录来说效果很好。如果表格为空,则在条形码=bcode_txt增量数量时插入一行。但在第一次记录之后,它不起作用。它会增加并创建新行(重复)。下面是供审查的代码。

private void jBCodeKeyPressed(java.awt.event.KeyEvent evt) {

        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
            int numofrows = jTable1.getRowCount();
            if (numofrows == 0) {
                insert_row();
            }
            if (!(numofrows == 0)) {

                for (int i = 0; i < numofrows; i++) {
                    int c_bcode = Integer.parseInt(model.getValueAt(i, 2).toString());
                    int bcode_txt = Integer.parseInt(jBCode.getText());
                    if (bcode_txt == c_bcode) {
                        int curr_qty = Integer.valueOf(model.getValueAt(i, 3).toString());
                        String entered_qty = p_qty.getText();
                        Double up = Double.parseDouble(p_u_price.getText());
                        int q = Integer.parseInt(entered_qty);
                        Double tp = q * up;
                        model.setValueAt(tp, i, 6);
                        q += curr_qty;
                        model.setValueAt(q, i, 3);
                    } else if (!(bcode_txt == c_bcode) && (!(numofrows == 0))) {
                        insert_row();
                    }
                }
            }
        }
    }   

共有1个答案

袁枫涟
2023-03-14

我将首先遍历所有行,以确定表中是否存在条形码。完成后,检查是否应该更新现有行或插入新行。

您的基本逻辑可能如下所示:

int barcodeRow = -1;
int bcode_txt = Integer.parseInt(jBCode.getText());

for (int i = 0; i < table.getRowCount(); i++)
{
    int c_bcode = Integer.parseInt(model.getValueAt(i, 2).toString());

    if (bcode_txt == c_bcode) 
    {
        barcodeRow = i;
        break;
    }
}

if (barcodeRow != -1)
    // update the row
else
    insertRow();

另请注意,不应将键侦听器添加到文本字段。相反,您可以添加操作侦听器。当按下 Enter 键时,将调用操作侦听器。

 类似资料:
  • 问题内容: 我有以下两个表(在MySQL中): 如何找出哪些电话是由人,他们提出是不是在?所需的输出将是: 问题答案: 有几种不同的方法可以执行此操作,效率各不相同,具体取决于查询优化器的性能以及两个表的相对大小: 这是最简短的陈述,如果您的电话簿很短,则可能是最快的陈述: 或(感谢WOPR) (忽略这一点,正如其他人所说的那样,通常最好只选择所需的列,而不是’ ‘)

  • 我有下面的JSON代码,有必要在每个记录的末尾添加键/值,如示例所示。我使用JOLT Transform处理器进行JSON转换。 输入: 预期输出: 非常感谢你的帮助。提前感谢。

  • 问题内容: 在SQL Server 2005中获得了此表,该表用于维护合并操作的历史记录: 列FROM_ID(int) 列TO_ID(int) 现在,我需要一个将原始FROM_ID作为输入并返回最后一个可用TO_ID的查询。 因此,例如: ID 1合并到ID 2 以后,ID 2合并为ID 3 稍后再次将ID 3合并为ID 4 因此,我要汇总的查询将作为输入(在我认为的WHERE子句中)ID 1,因

  • 问题内容: 如标题所示,我想选择以分组的每组行的第一行和最后一行。 我在此表中包含以下数据: 我需要获取的是列开头的第一个值和列末尾的最后一个值,并按group by group列进行分组。 结果表应如下所示: 我使用和和进行了查询。它可以在SQL Server 2012中使用,但不能在SQL Server 2008中使用。我需要一个可以在SQL Server 2008中执行的查询。 问题答案:

  • 问题内容: 我正在寻找连接2个表并仅显示明细表的最后一条记录的正确SQL代码。 我有一个带有2个表的数据库, 每个交易都有多个评论,但是我想创建一个显示所有交易的视图,并且仅显示每个交易的最后一条评论(由CommentTime确定)字段 问题答案: 编辑:我没有足够接近地阅读初始问题,也没有注意到视图中需要所有DEALS行。以下是我的修改后的答案:

  • 问题内容: 我有以下两个SQL表(在MySQL中): 如何找出哪些电话是由人,他们提出是不是在?所需的输出将是: 任何帮助将非常感激。 问题答案: 有几种不同的方法可以执行此操作,效率各不相同,具体取决于查询优化器的性能以及两个表的相对大小: 这是最简短的陈述,如果您的电话簿很短,则可能是最快的陈述: 或者(由于Alterlife) 或(感谢WOPR) (如其他人所说,忽略它通常最好只选择想要的列