当前位置: 首页 > 知识库问答 >
问题:

对象数组列表中的JComboBox值

端木野
2023-03-14

最近我遇到了一个问题,ArrayList中充满了对象

ArrayList<Item> allItems;

而每个 Item 对象都有自己的属性,如字符串名称或整数。在我的图形界面中,我希望JComboBox仅填充所有Items ArrayList中每个Item对象的名称值。allItems 中的对象是在我的程序运行时添加的,它一开始没有值。将新项目添加到我的数组列表后,我调用

comboBox.setModel(new javax.swing.DefaultComboBoxModel(allItems.toArray()));

但这只给我一些类似items.Item@283ae01的东西。有没有可能只显示ComboBox中ArrayList中每个项目的值String name

共有2个答案

尉迟晔
2023-03-14

您需要创建一个自定义渲染器来显示类中的适当属性。然而,自定义渲染器只是解决方案的一半,因为您将打破组合框的默认功能,使用键盘选择项目。

请参见带有自定义渲染器的组合框,以了解执行渲染并仍允许键盘选择组合框中的和项的实现。

司马彦
2023-03-14

默认渲染器使用列表中对象的toString方法来渲染项目。您可以a)重写添加到JComboBox的类的toString方法,以提供名称的正确呈现

@Override
public String toString(){
    return name;
}

或b)为JComboBox提供自定义渲染器,该渲染器自定义用于渲染JComboBox中项目的组件

ListCellRenderer renderer = new DefaultListCellRenderer(){
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if ( value == null ){
            return c;
        }
        if ( c instanceof JLabel ){
            JLabel label = (JLabel)c;
            Test t = (Test)value;
            label.setText(t.getName());
        }
        return c;
    }
};
myComboBox.setRenderer(renderer);

请注意,以上是java7之前的语法。在java7及以上版本中,这些类使用泛型进行参数化。

您可以进一步创建由List支持的自己的模型,因此当项目被添加到List时,您可以激发适当的侦听器来通知JComboBox更改(而不是每次都重新创建模型)。

在关于使用JComboBoxes的java教程中,还有更多这样的例子

 类似资料:
  • 我是Java和Stack Overflow的新手,我有一个关于排列的问题。 方法:我使用中的对象生成。每个的大小从(可能最小为1)到,并包含具有唯一名称属性的自定义生成对象。 问题:现在我的问题是如何在我的外部(y轴)中获得从第一个到最后一个的所有可能对象组合的排列(我想我们可以说这是x轴)? 我试着举一个简单的例子: : 1.1|1.2|1.3 : 2.1 : 3.1|3.2 这里,这些位于外部

  • 我有一个类来代表一个玩家的手牌。但是,我(在另一个类中)有一个数组列表,我想在其中表示一堆玩家手。问题是我不知道如何在多手牌的数组列表中将一张牌添加到手牌中。我有一个代表卡牌和一副牌的类,效果很好。我只是试图了解如何将对象添加到数组列表中的对象。谢谢!

  • 问题内容: 我如何用对象填充ArrayList,而内部的每个对象都不相同? 问题答案:

  • 我有个无法解决的问题。我希望我能让你明白。 给定以下航路点对象列表

  • 编辑:对于的最后一行,还可以放入:

  • 很抱歉这太模糊了,但代码太多了。 这是一个五卡梭哈游戏。基本上,我试图将对象添加到另一个数组列表中的数组列表中。 这是我创建玩家数组并将手类中的数组添加到其中的地方,至少我认为这就是正在发生的事情: 稍后,我尝试在循环交易中将牌添加到玩家阵列中的手牌阵列中。由于有五张牌,第一个循环进行了五次。第二个是玩家数组的长度(玩家总数),每次应该添加一张卡。 Deck类中有一个deal方法,由以下方法初始化