【问题标题】:Best way to construct a JComboBox?构建 JComboBox 的最佳方法?
【发布时间】: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] = 新动物(“狗”);

标签: java arrays jcombobox


【解决方案1】:

你可以改为:

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 中,您甚至可以将组合框绑定到数组,因此如果您更改数组,组合框会自动反映这些更改。

【讨论】:

    【解决方案2】:

    您可以创建JComboBox&lt;Team&gt;,因为JComboBox 显示的是由(在您的情况下)类Team 的方法toString 返回的字符串。因此覆盖类 Team 中的方法 toString 并让它返回团队名称。

    public class Team {
        String name;
    
        public String toString() {
            return name;
        }
    }
    

    因此您可以像这样创建JComboBox

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 2017-03-24
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多