我一直在尝试使用构造函数使用Array列表填充Eclipse GUI 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.setModel(new DefaultComboBoxModel(new String [] {&#34; Strawberry&#34;,&#34; Banana&#34;,&#34; Oranges&#34;}));
但是当我从文本文件中导入它们时,我不知道列表中有什么水果。
任何帮助都将不胜感激。
答案 0 :(得分:1)
for(Item i: list
{
comboBox.addItem( i.getName() );
}
不要在循环中继续创建新的ComboBoxModel。如果继续创建新模型,则无法向模型添加多个项目。因此,您只能看到添加了单个项目时创建的最后一个模型。如果你想使用这种方法,那么你将创建循环的模型OUTSIDE,然后只需在模型INSIDE循环中添加项目。
实际上你没有事件需要创建一个组合框模型。您只需将项目直接添加到组合框中即可:
类似的东西:
bsName
另一个选项是将Item对象直接添加到组合框中。然后,您可以使用自定义渲染器来控制Item对象的哪个属性在组合框中显示。有关此方法的更多信息,请查看Combo Box With Custom Renderer。
答案 1 :(得分:0)
如果您希望在组合框中显示Item
个对象,则应声明JComboBox
以存储Item
个对象。通过这种方式,您可以轻松添加项目,而无需根据模型进行任何操作:
JComboBox<Item> itemsCombo = new JComboBox<>();
list.forEach(itemsCombo::add);
组合框中显示的值将是Item.toString
返回的值。如果那不是您想要的(因为您的toString
返回对象的更完整描述 - 通常被认为是更好的做法),那么编写自己的Custom Renderer相当容易。
JComboBox
API的唯一不明智的缺点是您必须投射所选项目:
Item selectedItem = (Item)itemsCombo.getSelectedItem();
这很难看,我希望API不要求它,但要避免必须定义自己的模型,这是一个很小的代价。
事实上,您可以通过以下方式避免演员:
Item selectedItem = itemsCombo.getItemAt(itemsCombo.getSelectedIndex());
但那只是丑陋的。
顺便说一下,这是标准Java教程和样本已经过时的几个领域之一,所以不知道如何不知道使用泛型。