【问题标题】:How to check whether a value in a specific column of a selected row of a JTable is already in a JList?如何检查JTable的选定行的特定列中的值是否已经在JList中?
【发布时间】:2017-08-09 01:21:57
【问题描述】:

我的桌子上有一个名为“食物名称”的列。我从表中选择一个特定的食物项目,然后通过单击按钮将其传输到 JList。如果 JList 中已经存在该食物,我想通过单击按钮限制将我从 JTable 中选择的食物转移到 JList。

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

DefaultListModel 模型 = new DefaultListModel(); 整数计数 = 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++;


}

【问题讨论】:

    标签: java swing jtable jlist


    【解决方案1】:

    当你将你的字符串添加到模型中时,你会用“\n”将它连接起来,但是当你比较时你不会

    由于您的代码不够清晰,我想您的餐桌上的食物最后没有“\n”

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

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

    您的代码中的另一个错误是,如果值不相等,您的 for 循环中有一个中断

    所以实际上您的代码所做的是检查 foodname 是否等于 model.getElementAt(i) 以及是否插入并停止

    【讨论】:

    • 我尝试使用 trim()。但它不起作用。我认为循环有问题
    【解决方案2】:

    您的程序流程中有许多错误。您可能需要先对其进行调试并删除它们。

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

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

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

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

    【讨论】:

      【解决方案3】:

      问题是您正在逐个迭代项目列表,然后逐个进行比较。 所以必然会一直在列表中插入重复的食物项。

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

      1 个苹果

      2 橙色

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

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

      DefaultListModel.toArray() 获取它在数组中创建一个java.util.List 并应用contains() 方法来检查已经存在的逻辑。

      【讨论】:

      • 我应该删除for循环吗?问题在于 for 循环。 'onlistname' 的值始终是我传递给 JList 的第一个食物项。它不会改变
      • 正确使用 list.contains 逻辑而不是 for 循环
      猜你喜欢
      • 2013-04-24
      • 2013-03-25
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多