2014-10-28 122 views
2

希望你不要介意我在问一个关于对arrayList/List使用迭代器的新手问题。如何从java中的对象列表中提取数组

我有一个建筑类有几个数据成员:

public Building() { 
    private String buildingName; 
    private String buildingType; 
    private double width; 
    private double length; 
    private String managerName; 
    .... 
} 

我已经设置的toString()作为后续访问的名称的字符串,我不允许改变的toString返回不同的数据成员。

public String toString() { 
    return buildingName; 
} 

我已经加载building.xml文件创建的一堆建筑类建筑物的对象,我已经使用迭代器创建buildingNames在秋千组合框被视为数组/列表(但让我们忽略那些Swing组件下方并专注于只是逻辑):

// Create building combo box model. 
buildingComboBoxModel = new DefaultComboBoxModel<Building>(); 
buildingsCache = new ArrayList<Building>(buildings); 
Iterator<Building> i = buildingsCache.iterator(); 
while (i.hasNext()) buildingComboBoxModel.addElement(i.next()); 

// Create building list. 
buildingComboBox = new JComboBoxMW<Building>(buildingComboBoxModel); 
buildingComboBox.addActionListener(this); 
buildingComboBox.setMaximumRowCount(10); 
buildingSelectPanel.add(buildingComboBox); 

你有多少种方法都可以想到的,在放在一起用iterator没有显著代码更改的buildingType的名单怎么样?

如果我需要添加一个字符串,以它来修改在某些情况下一些buildingType字符串,

说,在一个建筑中,

String buildingName = "Adam's Place"; 
String buildingType = "Greenhouse"; 

[编辑后]

例如我需要将buildingType更改为“Adam's Place”的“Greenhouse Type 1”,并将另一个建筑的BuildingType更改为“Greenhouse Type 2”

可以使用迭代器完成,以及如何实现?

如果不是,其他方式欢迎

在此先感谢!

+0

凡205是从哪里来的? – 2014-10-28 23:02:41

+0

我刚编辑我的问题。我的意思是我需要使buildType比xml文件中的更具体一些。 – mk7 2014-10-28 23:08:43

回答

1

处理从iterator读取的对象没有特殊的方法。如果只需要对Building类别的成员设置不同的值,可以用标准方式完成,即通过添加成员设置器函数。

例如,修改buildingType在任何时间,需要一种setBuildingType()方法:

public class Building { 
    private String buildingName; 
    private String buildingType; 
    private double width; 
    private double length; 
    private String managerName; 
    .... 
    public void setBuildingType(String buildingType) { 
     this.buildingType = buildingType; 
    } 
} 

鉴于上述情况,在基于迭代器的代码可以作如下修改:

Iterator<Building> i = buildingsCache.iterator(); 
while (i.hasNext()) { 
    Building b = i.next(); 
    b.setBuildingType("Whatever type"); 
    buildingComboBoxModel.addElement(b); 
} 
+0

好吧b.setBuildingType(“无论类型”)将使我能够将buildingType更改为任何我想要的。但是,在我开始修改某些buildingType之前,如何从Building对象中首先创建所有BuildingType的列表(现在可以重复),以使列表显示在ComboBox上? – mk7 2014-10-29 04:53:57

+0

如果我这样做:while(i.hasNext()){ \t \t \t Building b = i.next(); \t \t buildingComboBoxModel.addElement(b。getNickName()); \t \t},这是行不通的,因为b.getNickName()是一个字符串,而不是一个Building对象。 – mk7 2014-10-29 05:04:02

+0

听起来像你需要将建筑物类型放在组合框的标签中。检查相应的Java教程页面:http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html – PNS 2014-10-29 19:13:09

相关问题