将JTable1与JTable2进行比较

时间:2018-06-12 12:30:06

标签: java swing for-loop jtable compare

我正在制作一个会计应用,但我被困住了。我有两个JTables,它是DefaultTableModel,我已经将模型添加到JScrollPane。一个JTable是库存(包括用户购买的物品清单)和另一个发票(包括用户要销售的物品清单)。我想将发票项目与库存项目进行比较,如果未找到匹配项,则会提示用户您的库存中没有此项目。

这是代码 -

for(int i = 0; i<model.getRowCount();i++){
    for(int j = 0; j<model.getColumnCount();j++){
        for(int k = 0;k<model1.getRowCount();k++){
            for(int l = 0; l<model1.getColumnCount();l++){
                if (!(model.getValueAt(i,j).equals(model1.getValueAt(k,l)))){
                          JOptionPane.showMessageDialog(null, "You don't have {item name} in your inventory.","Item not found.", JOptionPane.INFORMATION_MESSAGE);
                      }
                  }
              }
          }
      }

我做错了什么?

注意 - 项目的名称位于列的索引1处。

1 个答案:

答案 0 :(得分:0)

我不认为你试图这样做的方式是一种好方法。但是你要做的是将元素与另一个模型的每个条目进行比较。其中一个条目很可能不等于第一个模型中的对象,因此始终会显示您的错误消息。

也许以下代码可以让您了解代码出了什么问题:

for(int i = 0; i<model.getRowCount();i++){
for(int j = 0; j<model.getColumnCount();j++){
    Object objectFromModel=model.getValueAt(i,j);
    //following loops check if objectFromModel is existent in the other model aka model1
    boolean objectFromModelExistsInModel1=false;
    for(int k = 0;k<model1.getRowCount();k++){
        for(int l = 0; l<model1.getColumnCount();l++){
            //your Object should implement equals if you want this to work
            if (objectFromModel.equals(model1.getValueAt(k,l))){
                objectFromModelExistsInModel1=true;
            }
        }
    }
    //If we have not found the item in the other model, we do some sort of output
    if(objectFromModelExistsInModel1){
        //TODO proper message
        System.out.println("Item not found in inventory!" + objectFromModel.toString());
    }
}

}