【问题标题】:Showing list of what's in ArrayList [closed]显示 ArrayList 中的内容列表 [关闭]
【发布时间】:2014-11-26 05:10:32
【问题描述】:

让我的 JComboBox 的下拉列表按酒店名称显示酒店列表时遇到问题。

我的 ArrayList 包含 hotelNo、hotelName、city。

在我的 GUI 中,我写了这个

 Object[] hotelArr = { databaseconn.arrayListHere() };
    @SuppressWarnings({ "rawtypes", "unchecked" })
    // this just hide some unimportant warnings
    JComboBox hotelList = new JComboBox(hotelArr);
    hotelList.addActionListener(this);
    frame.add(hotelList, BorderLayout.NORTH); 

我可以单击下拉列表,但它只显示“[]”。我认为它们被称为括号。 我希望它显示也存储在 ArrayList hotelInfo 中的hotelName 列表,我已将它放入一个名为 arrayListHere 的方法中。

那我该怎么做呢?在这个问题上花了很多时间。在任何地方都找不到答案或帮助。我还检查了文档,但没有得到任何我可以使用的东西。

【问题讨论】:

  • 你能做到这一行吗:System.out.println(databaseconn.arrayListHere());一开始就告诉我们价值是什么?
  • 是的。我只是这样做了,结果是“[]”。但在我的另一堂课(databaseconn)中,它打印出这个“[1, Sas Radisson, Copenhagen] [1, Sas Radisson, Copenhagen, 2, Grosvenor Hotel, Copenhagen] [1, Sas Radisson, Copenhagen, 2, Grosvenor Hotel, Copenhagen , 3, Hilton, London] [1, Sas Radisson, Copenhagen, 2, Grosvenor Hotel, Copenhagen, 3, Hilton, London, 4, Ritz, Oslo] [1, Sas Radisson, Copenhagen, 2, Grosvenor Hotel, Copenhagen, 3 , Hilton, London, 4, Ritz, Oslo, 5, Best Western, null] "
  • 来自tutorial关于组合框的使用如果你把其他对象放在一个组合框中,默认的渲染器会调用toString方法来提供一个字符串显示
  • 无法让它发挥作用。我觉得我太傻了,呵呵。我编辑了我的代码,但现在有点不知所措。我不知道我做错了什么。任何人都可以通过teamviwer帮助我并指出我的错误等吗?

标签: java swing arraylist jcombobox


【解决方案1】:

您的 Object[] hotelArr 的定义方式不正确。此外,不可能简单地将列表转换为数组。相反,您必须将列表转换为 JComboBox 可以处理的数据结构。有几种可能性:


1. (在我看来最好,因为:

  • 保证类型安全,如果您正在处理 Object 以外的类
  • arrayListHere() 的返回类型可以是接口Collection,这使得它比返回的List 更常见

Collection<E> list = databaseconn.arrayListHere();
Vector<E> vector = new Vector(list);
JComboBox box = new JComboBox(vector);

2. 如果您使用 List 作为返回类型 arrayListHere()

Object[] array = databaseconn.arrayListHere().toArray();
JComboBox box = new JComboBox(array);

【讨论】:

    【解决方案2】:

    您的问题是您得到一个空白 [] 并将其视为一个数组(嗯 - 很难用语言解释,我将使用代码来这样做)..

    //you *certainly* get an array here
    Object[] list = databaseconn.arrayListHere();
    
    //and as a result you get this code
    Object[] hotelArr = new Object[]{ list } ;
    

    当您收到消息 [] 时,肯定 arry 是空的,这导致我假设 databaseconn.arrayListHere() 是一个空数组

    你的解决方法是

    Object[] hotelArr = (Object[]) databaseconn.arrayListHere();
    

    但请在将其放在前面之前检查该数组是否存在!

    【讨论】:

      【解决方案3】:

      你说你的ArrayList have 3 输入 pf 数据,即hotelNo, hotelName, city

      & 现在您将其加载到Object[] hotelArr,然后您将其添加到JComboBox

      那么应用程序将如何理解hotelNo, hotelName, city 中的哪一个。

      因此,彼此创建一个String[],将只有hotelName

      然后尝试将其加载到JComboBox,然后它会工作。当你是Object Array中的multiset数据时,你不能直接将object添加到JCombobox。

      如果您要传递像 hotemName 这样的单组数据,那么它会起作用。看到这个:

      List<String > ar = new ArrayList<>();
      ar.add("hotel");
      ar.add("hotel2");
      ar.add("hotel3");
      
      Object[] al = ar.toArray();
      
      JComboBox j = new JComboBox(al);
      System.out.println(j.getItemCount());
      

      this running example

      【讨论】:

      • 我已经阅读了你们所有的 cmets 并且我已经尝试过一切。我失败了。我想我不明白该怎么做。有人可以通过teamviewer或其他方式帮助我吗?
      猜你喜欢
      • 2018-01-18
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 2023-04-04
      • 2023-04-05
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多