Java 使用多维数组列表填充JComboBox

Java 使用多维数组列表填充JComboBox,java,swing,arraylist,jcombobox,Java,Swing,Arraylist,Jcombobox,我一直在尝试使用构造函数使用数组列表填充EclipseGUI Java JComboBox,但没有任何运气。这就是我迄今为止所尝试的 import item.Item; import javax.swing.JComboBox; import java.util.ArrayList; public class SelectionScreen{ private JFrame frame; static ArrayList< Item> list; p

我一直在尝试使用构造函数使用数组列表填充EclipseGUI Java JComboBox,但没有任何运气。这就是我迄今为止所尝试的

import item.Item;  
import javax.swing.JComboBox;
import java.util.ArrayList;  


public class SelectionScreen{
    private JFrame frame;
    static ArrayList< Item> list;
    private String items;

     public static void main (String[] args){  

        initialize();
     }
     public void initialize(){
        list = new ArrayList< Item >();  
        list.add(new Item("Strawberry,200,.25,.75);
        list.add(new Item("Banana,200,.25,1.00);  
        list.add(new Item("Oranges,200,.25,2.00);


       JcomboBox comboBox = newJcomboBox();
       ComboBox.setBounds(63,29,86,22)
       frame.getContentPane().add(comboBox); 

     // here is where I tried to fill the combobox

     //comboBox.setModel(new DefaultComboBoxModel(Item.getName()))); //Wrong
     //comboBox.setModel(Item.getName); //Wrong

  //the following only loads the last item in the list which is Oranges
     for(Item i: list{

      comboBox.setModel(new DefaultComboBoxModel(New String[] { 
      i.getName()})); 
      }

   // tried making a different list to collect my fruits.
     for(Item i: list){
     list2[ i.getName()];
     Item.length;
     } //which was a complete fail.
我在这里完全不知所措,对Java不是很有经验。我可以使用 comboBox.setModelnew DefaultComboxModelNew字符串[]{草莓、香蕉、橙子}; 但当我从文本文件导入水果时,我不知道列表中有哪些水果

任何帮助都将不胜感激

/*The following only loads the last item in the list which is Oranges.*/

for(Item i: list)
{
      comboBox.setModel(new DefaultComboBoxModel(new String[] { 
      i.getName()})); 
}
不要在循环中不断创建新的ComboBoxModel。如果继续创建新模型,则不能向模型中添加多个项。因此,您只能看到最后一个添加了单个项的模型。如果您想使用这种方法,那么您可以在循环外部创建模型,然后只需在循环内部向模型添加项

实际上,您不需要创建组合框模型。您可以直接将项目添加到组合框中:

比如:

for(Item i: list
{
      comboBox.addItem( i.getName() );
}
另一个选项是将Item对象直接添加到组合框中。然后,可以使用自定义渲染器控制组合框中显示项对象的哪个属性。查看此方法的更多信息。

如果希望在组合框中显示项对象,则应声明JComboBox以存储项对象。通过这种方式,您可以轻松添加项目,而无需对模型进行任何修改:

JComboBox<Item> itemsCombo = new JComboBox<>();
list.forEach(itemsCombo::add);
这很难看,我希望API不需要它,但为了避免定义自己的模型,这是一个很小的代价

事实上,您可以通过以下方式避免演员阵容:

Item selectedItem = itemsCombo.getItemAt(itemsCombo.getSelectedIndex());
但那也一样难看


顺便说一句,这是标准Java教程和示例已经过时的几个领域之一,因此不知道如何使用泛型在这里毫无疑问

组合框中显示的值将是Item.toString返回的值。-您不应该依赖于toString实现。通常,toString会为对象的所有属性显示一个字符串,OP只想显示名称。编写自己的自定义渲染器相当容易。-仅供参考,您仍然需要小心使用自定义渲染器,因为这将破坏组合框的一些默认功能。请查看我的答案中提供的有关问题和潜在解决方案的链接。工作正常。非常感谢。
Item selectedItem = itemsCombo.getItemAt(itemsCombo.getSelectedIndex());