为什么我不能在我的JComboBox中添加多个数组?

时间:2013-03-29 11:58:10

标签: java arrays swing user-interface jcombobox

我正在制作一个剧场座位预订系统用于某些课程作业,但是我在制作JComboBox时遇到了麻烦,以帮助用户从197年的一套座位中选择一个座位。

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

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

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

这是我目前的JComboBox的代码,据我所知,这应该有效 - 我无法弄清楚它为什么不是。我在Seat类中有一个名为toString()的方法,它返回表示座位的String。

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说每个标记都没问题,但是当我尝试运行该程序时,我遇到了这个例外:

  

线程“main”中的BlException java.lang.IllegalArgumentException:   无法将java.lang.Object存储在Seat at的数组中   org.apache.commons.lang3.ArrayUtils.addAll(ArrayUtils.java:3469)at at   BookingsSystem.main(BookingsSystem.java:267)引起:   java.lang.System.arraycopy的java.lang.ArrayStoreException(Native   方法)at   org.apache.commons.lang3.ArrayUtils.addAll(ArrayUtils.java:3459)...   另外1个Java结果:1

第267行是上面的一行

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

像这样创建你的JComboBox:

JComboBox seatCombobox = new JComboBox(seats);

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