我的表中有一个名为" 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++;
}
答案 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()
方法检查已存在的逻辑。