将子字符串与JList字符串进行比较

时间:2013-12-25 21:21:34

标签: if-statement arraylist substring jlist defaultlistmodel

如果我没有提供足够的背景资料,请提前告知我。长时间读者,第一次问问。

我正在创建一个程序,其中有一个通过制表符分隔的.txt文件访问的汽车数据库(我们最近在我的编程课中做了类似的事情,所以我想扩展它)。

我的格式不是使用终端窗口,而是在ArrayList中显示Car对象(包含品牌,型号,年份,价格等)。我正在使用JFrame,JList和ListModel,因为我正在使用Car对象数组。

在我的程序中,我想创建一个删除方法,用户可以从数据库中删除项目。最初,他们会从JList中选择项目,然后点击删除按钮。这将调用delete()方法,该方法如下所示...

void delete()
    {
        int i = list.getSelectedIndex();
        String string = (String)listModel.getElementAt(i); 


        for(Car c : cars)
        {
            String year = String.valueOf(c.getYear());
            String conditionReport = String.valueOf(c.getConditionReport());
            String price = String.valueOf(c.getPrice());

            if(c.getMake().indexOf(string) != -1 && c.getModel().indexOf(string) != -1 && year.indexOf(string) != -1 && conditionReport.indexOf(string) != -1 && price.indexOf(string) != -1 && c.getWarranty().indexOf(string) != -1 && c.getComments().indexOf(string) != -1)
            {
                int choice = JOptionPane.showConfirmDialog(null, "Are you sure you would like to remove the "  + cars.get(i).getYear() + " " + cars.get(i).getMake() + " " + cars.get(i).getModel() + "?", "Choose One", JOptionPane.YES_NO_OPTION);
                if(choice == JOptionPane.NO_OPTION || choice == JOptionPane.CLOSED_OPTION)
                {
                    return;
                } else
                {
                    cars.remove(c);
                    listModel.removeElementAt(i);
                }
            }
        } 


        writeFile();
    }

我已将我的问题确定为if语句。 (我在之前和之后打印了一些东西,试图找到程序所在的位置。'list'是我的JList,'listmodel'是我的默认列表模型.Car是我创建的包含元素的对象(如get方法所示) listModel中显示的元素只是表示getMake(),getModel()等的字符串......(每个'get'项目相隔大约10个空格。)

我在if语句中做错了什么?我认为getMake()和getModel()(等等)将是所选索引的子字符串。

非常感谢你的帮助!关于我可以提出更具体和明确的进一步问题的方式的任何意见将不胜感激!

1 个答案:

答案 0 :(得分:0)

您似乎正在这样做以在某种数据结构中找到所选择的Car。你最好做一些编程自己有cars访问权限的自定义列表模型。然后您可以立即检索选择。如果carslist仅仅相似的ArrayList,我也不明白为什么你不能对cars.remove(list.getSelectedIndex());的效果做些什么。或者由于JList可以显示任何对象,因此覆盖Car的toString以显示列表当前显示的内容并使列表显示Cars。然后你可以cars.remove((Car)list.getSelectedValue());

但除此之外,基于您的描述,听起来您的意思是以另一种方式进行评估。它是列表项,应该包含所有Car属性,而不是包含列表项的所有Car属性。像

这样的东西
if( string.contains(c.getMake()) && string.contains(year) // and so on

(或者使用indexOf,但由于contains只返回indexOf > -1,因此使用contains会使代码更短。)