gpt4 book ai didi

java - 使用存储在 ArrayList 中的自定义对象填充 JComboBox

转载 作者:行者123 更新时间:2023-12-02 02:58:25 30 4
gpt4 key购买 nike

我正在尝试使用对象名称填充JComboBox。这些对象属于 Category 类型,并存储在 Category 类的 ArrayList(名为 categoryList)中。

这是Category类的内容:

public class Category {
private static String catName;
private static List<Category> categoryList;

public static void addToCatList(String str)
{
Category cat = new Category();
Category.setCatName(str);

categoryList.add(cat);
}

public static List<Category> getCatList()
{
return categoryList;
}

public static String getCatName()
{
return catName;
}

public static void setCatName(String catName)
{
Category.catName = catName;
}

@Override
public String toString()
{
return catName;
}
}

以下是填充 JCombobox 的代码(方法名称:populateComboBox()):

        List<Category> catList = new ArrayList<Category>();
catList = Category.getCatList();
Category list[] = new Category[catList.size()];
list = catList.toArray(list);

for(int i = 0; i <list.length; i++)
{
selectCatComboBox.addItem(list[i].getCatName());
}
addItemDialog.setVisible(true);

当我用两个名为 Obj1Obj2 的对象填充 ArrayList 时,出现以下问题:

  1. 当调用 populateComboBox() 时,组合框仅显示第二个对象,即仅显示 Obj2。预期显示为 Obj1Obj2

  2. 因为它只显示Obj2。当调用 populateComboBox() 两次时,组合框会显示两个 Obj2。调用三次时,它会显示三个 Obj2。即该方法被调用的次数,Obj2 在组合框中显示的次数。

  3. categoryList ArrayList 应该位于 Category 类中吗?或者它应该在控制类内部?我对这个有点困惑。

最佳答案

你的问题是你的设计被破坏了。类别的 catName 名称字段是静态的,因此整个类只存在一个对象。如果你改变它,你就在全类范围内改变它。这就是为什么 Obj1 和 Obj2(顺便说一下,变量的坏名称)共享相同的名称并显示相同的名称。

这个类应该分为两个类,一个类称为 Category,它没有静态字段,没有 List 字段,有私有(private)实例字段、构造函数、公共(public)方法,另一个类可能称为 Category,它包含一个非-静态ArrayList<Category> ,与 addCategory(...)以及这样的方法。在关心 GUI 之前先解决这个问题,否则你将把你的房子 build 在一个非常不稳定的基础上。每当您创建静态字段时,请始终问自己为什么要这样做,并强烈考虑是否可以将其改为实例。

关于java - 使用存储在 ArrayList 中的自定义对象填充 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42735826/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com