如何检查JTable的选定行的特定列中的值是否已存在于JList中?

时间:2017-03-17 13:02:45

标签: java swing jtable jlist

我的表中有一个名为" Food Name"的列。我从表中选择一个特定的食品,然后通过点击按钮将其转移到JList。我想限制通过按钮点击将我从JTable中选择的食物项目转移到JList,如果该食物项目已经存在于JList中。

我尝试使用for循环比较JList和所选食品中的值。我使用equals()方法来比较字符串。但它总是错误的,比较实际上并没有发生

DefaultListModel model = new DefaultListModel(); int count = 0;

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    int row = foodItemsTable.getSelectedRow();        
    String foodname = foodItemsTable.getValueAt(row, 1).toString();//get the selected food item
    String onlistname = "";

    if(count==0)
    {
       newMenuItemsList.setModel(model);
       model.addElement(foodname+"\n");
    }


        if(count>0)
        {
            for(int i=0;i<count+1;i++)
            {
               onlistname = model.getElementAt(i).toString();

                if(!foodname.equals(onlistname))
                {
                     model.addElement(foodname+"\n");
                      break;

                }
            }


        }
        count++;


}

3 个答案:

答案 0 :(得分:1)

程序流程中存在大量错误。您可能需要先调试它并将其删除。

如果模型中没有元素,则将其添加到列表框中,并使用换行符(为什么?)将表中的元素添加到模型中。

如果已有元素,则在比较之前不要将换行符添加到foodname。由于您立即找到了不匹配的项目,因此您可以使用换行符再次添加新项目(使其对搜索功能不可见)。

实际上,您将始终只比较第一个条目。如果没有中断,您将为列表中已有的每个元素添加新条目,直到找到它为止。

即使你找到了元素(这种情况永远不会发生,但是如果你修复了搜索,那么这个错误将会发生),计数会增加。

答案 1 :(得分:0)

当您将String添加到模型中时,您将使用&#34; \ n&#34;但是当你比较时,你不会

因为你的代码不够明确,我想在你的餐桌上有食物天堂&#34; \ n&#34;在结束

一个简单的解决方案是在比较之前修剪()字符串

if(!foodname.trim().equals(onlistname.trim()))

代码中的另一个错误是,如果值不等于你的for循环中断了

所以你的代码实际上做的是检查foodname是否等于model.getElementAt(i),如果它不是插入和停止

答案 2 :(得分:0)

问题是你是逐个迭代项目列表然后单独比较。 因此,必须始终在列表中插入重复的食物项目。

在您的逻辑中考虑您的列表中已有2个项目

1 Apple

2 Orange

现在按照你的逻辑,如果你有新项目作为Apple 你有条件 !foodname.equals(onlistname)将成为现实,它会再次将Apple添加到您的列表中。

您的条件应该是.contains()检查列表以查找是否已存在。

转到DefaultListModel.toArray()以便在数组中创建java.util.List并使用contains()方法检查已存在的逻辑。