【发布时间】:2021-12-18 18:44:39
【问题描述】:
所以我有一个程序,用户可以从下拉列表中选择不同的团队;这是 JComboBox 的代码:
JComboBox<String> homeSelector = new JComboBox<String>(this.getTeamNames(Team.teamList));
teamList 是属于公共 Team 类的公共静态 ArrayList,存储了所有可选择的球队;它是在启动时从应用程序的文件初始化的(我没有为此应用程序使用数据库)。所以这是我遇到的问题:我知道 JComboBox 可以使用 String[] 参数来自动为用户生成选择选项,但是我很难以编程方式实际生成 String[]。要明白我的意思,这是我上面看到的 getTeamNames() 方法的代码:
private Object[] getTeamNames(ArrayList<Team> teams) {
ArrayList<String> teamNames = new ArrayList<String>();
for(int i = 0; i < teams.size(); i++) {
Team selected = teams.get(i);
String name = selected.getName();
teamNames.add(name);
}
return teamNames.toArray();
}
如您所见,getTeamNames() 返回一个 Object[],我知道它是 String[] 的类型不匹配。这样做的原因是因为在我有返回 String[] 的方法之前;但是因为 toArray() 方法总是返回一个 Object[],所以我试图将 Object[] 转换为 String[](就像这样:(String[])teamList.toArray()) 根据我的 IDE 这很好,但是导致程序崩溃并出现错误“类转换异常”。但另一方面,它显然也不适用于 Object[],因为 JComboBox() 构造函数的参数 Object[] 未定义。
所以我想知道的是,有没有更好的方法来做到这一点?最好不必手动对所有团队数据进行硬编码,因为那真的很糟糕(更不用说这肯定不是一个干净或优雅的解决方案)。唯一的问题是我看不到你将如何以编程方式制作一个独立的 Array 对象(这在 Java 中甚至可能吗?),因为 Array 类似乎总是与接口结合(即 ArrayList、ArrayDeque 等)这些也不是 JComboBox 构造函数的合法参数。一如既往,我们非常感谢任何和所有帮助。
【问题讨论】:
-
return teamNames.toArray(new String[0]); -
是的,你可以在 Java 中创建一个独立的数组。 10 个整数的数组示例:int[] array = new int[10];。如果您正在创建一个对象数组,则数组中的每个对象仍然必须是新的: Animal[] animals = new Animals[10];动物[0] = 新动物(“狗”);