构造 JComboBox 的最佳方法?

Best way to construct a JComboBox?

所以我有一个程序,用户可以从下拉列表中 select 不同的团队;这是 JComboBox 的代码:

JComboBox<String> homeSelector = new JComboBox<String>(this.getTeamNames(Team.teamList));

teamList 是属于 public Team class 的 public 静态 ArrayList,并存储所有 selectable teams;这是在启动时从应用程序的文件初始化的(我没有为此应用程序使用数据库)。所以这是我遇到的问题:我知道 JComboBox 可以使用 String[] 参数自动为用户生成 selection 选项,但是我很难以编程方式实际生成 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() returns 一个 Object[],它与 String[] 类型不匹配。这样做的原因是因为在我有返回 String[] 的方法之前;但是因为 toArray() 方法总是 returns 一个 Object[],我试图将 Object[] 转换为 String[](像这样:(String[])teamList.toArray())这只是根据我的 IDE 很好,但导致程序崩溃并出现错误“Class cast exception”。但另一方面,它显然也不适用于 Object[],因为 JComboBox() 构造函数的参数 Object[] 未定义。

所以我想知道的是,有没有更好的方法来做到这一点?最好不必在所有团队数据中手动硬编码,因为那真的很糟糕(更不用说这肯定不是一个干净或优雅的解决方案)。唯一的问题是我看不出你将如何以编程方式制作一个独立的 Array 对象(这在 Java 中甚至可能吗?),因为 Array class 似乎总是与接口结合(即 ArrayList、ArrayDeque 等),这些也不是 JComboBox 构造函数的合法参数。一如既往,非常感谢您的帮助。

你可以这样写:

private String[] getTeamNames(ArrayList<Team> teams) {
    String[] teamNames = new String[teams.size()];
    for(int i = 0; i < teams.size(); i++) {
        teamNames[i] = teams.get(i).getName();
    }
    return teamNames;
}

如果您学习 JavaFX,那会有更现代的 UI 编程感觉。在 JavaFX 中,您甚至可以将组合框绑定到数组,因此如果您更改数组,组合框会自动反映这些更改。

您可以创建 JComboBox<Team>,因为 JComboBox 显示的是字符串 return 通过方法 toString 编辑的(在您的情况下)class Team。因此覆盖 class Team 中的方法 toString 并使其 return 团队名称。

public class Team {
    String name;

    public String toString() {
        return name;
    }
}

因此您可以像这样创建 JComboBox

JComboBox<Team> homeSelector = new JComboBox<Team>(Team.teamList.toArray(new Team[0]));