【问题标题】:Why can't I add multiple arrays to my JComboBox?为什么我不能向我的 JComboBox 添加多个数组?
【发布时间】:2013-03-29 11:58:09
【问题描述】:

我正在为一些课程制作一个剧院座位预订系统,但在创建一个 JComboBox 来帮助用户从总共 197 个座位中选择一个座位时遇到了麻烦。

座位由“Seat”对象表示,这些对象只是一些变量的集合,例如“isBooked”(布尔值)。座位排列成多个座位阵列,每个阵列代表一排座位,例如A[], B[]...

我可以轻松地将单个数组添加到 JComboBox 并使其正常工作,但是尝试将更多数组添加到 JComboBox 中的列表失败。我可以一次添加一个座位,但这显然效率低下。

如何向 JComboBox 添加多个数组?即 A[1]、A[2]、A[3]...A[14]、B[1]、B[2]...

这是目前我的 JComboBox 的代码,据我所知,这应该可以工作 - 我不知道为什么不能。我在 Seat 类中有一个名为 toString() 的方法,它返回代表座位的字符串。

DefaultComboBoxModel model = new DefaultComboBoxModel();
            model.addElement(A);
            model.addElement(B);
            model.addElement(C);
            model.addElement(D);
            model.addElement(E);
            model.addElement(F);
            model.addElement(G);
            model.addElement(H);
            model.addElement(J);
            model.addElement(K);
            model.addElement(L);
            JComboBox seatCombobox = new JComboBox();
            seatCombobox.setModel(model);
            unbookSeatWindow.buttonsPanel.add(seatCombobox);

这段代码的结果是这样的:http://pasteboard.co/1eej5Be1.png 在 JComboBox 中是代表每个数组的随机代码(我忘记了这个名称),但没有代表数组中每个单独的座位。 JComboBox 总共应该有 197 个条目

我们将不胜感激。

按照建议,我尝试使用

`allSeats = ArrayUtils.addAll(A, B, C, D, E, F, G, H, J, K, L);`

但 NetBeans 告诉我将其更改为

`allSeats = (Seat[]) ArrayUtils.addAll(A, B, C, D, E, F, G, H, J, K, L);`

NetBeans 然后说一切都很好,但是当我尝试运行程序时,我得到了这个异常:

线程“主”java.lang.IllegalArgumentException 中的 BlException: 无法将 java.lang.Object 存储在 Seat 的数组中 org.apache.commons.lang3.ArrayUtils.addAll(ArrayUtils.java:3469) 在 BookingsSystem.main(BookingsSystem.java:267) 原因: java.lang.System.arraycopy 处的 java.lang.ArrayStoreException(本机 方法)在 org.apache.commons.lang3.ArrayUtils.addAll(ArrayUtils.java:3459) ... 还有 1 个 Java 结果:1

第 267 行是上面的行

【问题讨论】:

标签: java arrays swing user-interface jcombobox


【解决方案1】:

使用@Apurv 建议的方法组合数组。

Seat[] seats = ArrayUtils.addAll(A, B, C);

像这样创建你的 JComboBox:

JComboBox seatCombobox = new JComboBox(seats);

这将使用默认模型和选择的第一个项目创建一个新的 JComboBox

【讨论】:

  • 嘿嘿,你确定没有别的办法吗?像这个 OP 必须对 n 个数组使用 n 个循环。
  • 你是对的,不需要显式循环,查找 JComboBox 的 JavaDoc 发现有一个带有数组的构造函数。
  • Netbeans 无法识别 ArrayUtils
  • 它是 Apache Commons 库的一部分。 commons.apache.org/proper/commons-lang/download_lang.cgi
  • @flight2039 太好了,谢谢。我已将其下载并安装到 Netbeans 中。您是否知道 ArrayUtils 的导入语句是什么?
【解决方案2】:

您可以使用ArraysUtil.addAll() 将所有数组合并为一个,然后将单个数组添加到JComboBox

【讨论】:

  • Netbeans 无法识别 Arraysutil
  • here下载Commons-lang jar。
  • 这似乎不起作用。请查看问题中的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 2015-11-30
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多