ArrayList 输出重复自身?

ArrayList output repeating itself?

所以我尝试使用组合框来显示不同类型食物的不同类别选项。每种食物都有自己的数组列表,如蔬菜、水果、乳制品等。因此当用户 select 选择食物类别时,它将在文本区域中显示该类别的所有食物。但是,每当 select 编辑不同的类别时,该列表就会不断重复自身。所以第一次点击没问题,只会显示一次食物列表。但是,如果您在此之后 select 一个不同的类别,该列表将重复出现。这是我现在使用的代码:

public class foodTypesJFrame extends javax.swing.JFrame {

// Food category arraylists
ArrayList <String> fruitsList = new ArrayList();
ArrayList <String> veggiesList = new ArrayList();
ArrayList <String> dairyList = new ArrayList();



public void foodCategory(String box, String category, ArrayList list)
{
    box = foodCategoryBox.getSelectedItem() + "";

    if (box.equals(category))
    {
        foodOutput.setText("");
        int indexNumber = 0; 
        // Display the different foods
        for (int index = 0; index < list.size(); index++) 
        { 
            indexNumber = index + 1; 
            foodOutput.append(indexNumber + ". " + list.get(index) + "\n"); 
        }
    }
}        

private void categoryBoxActionPerformed(java.awt.event.ActionEvent evt) {                                            

    String foodType = foodCategoryBox.getSelectedItem() + "";

    String fruits = "Fruits";
    String veggies = "Vegetables";
    String dairy = "Dairy";

    Collections.addAll(fruitsList, "Apple", "Orange", "Strawberry");
    Collections.addAll(veggiesList, "Lettuce", "Carrot", "Broccoli");
    Collections.addAll(dairyList, "Milk", "Cream", "Cheese");

    foodCategory(foodType, fruits, fruitsList);
    foodCategory(foodType, veggies, vegetableList);
    foodCategory(foodType, dairy, dairyList);

因此,如果我 select 首先是水果类别,它将输出 ” 1. 苹果 2.橙色 3.草莓” 但是如果我 select 之后的蔬菜类别,它会输出 ” 1.生菜 2. 胡萝卜 3.西兰花 4.生菜 5. 胡萝卜 6 西兰花

有没有人对如何使列表只显示一次有任何建议?

您在 ActionEvent 侦听器中调用 Collections.addAll(...) 这意味着每次点击都会将新元素添加到 ArrayList 中。要解决此问题,您需要初始化 class 的构造函数中的所有列表(如果您有固定的产品列表则更正确),或者在 Collections.addAll(...) 之前为每个列表调用 clear() 方法列表(如果您真的需要更改事件侦听器中的产品列表)

每次调用 categoryBoxActionPerformed 时,您都会将 相同的 项目添加到 ArrayLists

要解决此问题,您可以执行以下操作之一:

  1. 或者每次调用categoryBoxActionPerformed()时重新初始化ArrayLists,所以它看起来像这样:

     //at the beginning of the method.
     fruitsList = new ArrayList<>();
     veggiesList = new ArrayList<>();
     dairyList = new ArrayList<>();
    
  2. 或者用boolean包裹起来:

     boolean firstTime = true; // create a global variable
    

然后换行加法:

    if(firstTime){
       Collections.addAll(fruitsList, "Apple", "Orange", "Strawberry");
       Collections.addAll(veggiesList, "Lettuce", "Carrot", "Broccoli");
       Collections.addAll(dairyList, "Milk", "Cream", "Cheese");
       firstTime = false;
    }