Java 使用多维数组列表填充JComboBox
我一直在尝试使用构造函数使用数组列表填充EclipseGUI 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
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());