我正在制作一个会计应用,但我被困住了。我有两个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处。
答案 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());
}
}
}