我有JList<Contract>
。代码摘录很少:
public class Contract
{
private int houseId;
public int getHouseId() { return houseId; }
public void setHouseId(int hId) { houseID = hId; }
public String toString()
{
// want to return house address here somehow.
}
}
public class House
{
private int houseId;
private String address;
public int getHouseId() { return houseId; }
public String getAddress() { return address; }
}
public class Registry
{
private ArrayList<Contract> contracts;
private ArrayList<House> houses;
// ...get-methods...
}
在我的JList中,我想显示来自address
类的House
。但我仍然需要元素类型为Contract
或Contract
的引用。怎么办呢?
答案 0 :(得分:2)
您需要实现自定义单元格渲染器,无论如何这都是一个好主意(在任何实际应用程序中)。 渲染器(swing组件)将获取Contract对象,并可从中获取房屋数据 Here是Oracle的教程 高级:您可以在模型中混合类,并按here分类切换 (那个是JTables,但它基本上是一样的。)
答案 1 :(得分:1)
无论您采用可视化的Swing方法(即已建议的自定义渲染器),请考虑为您的类使用合成。
在Contract类中,不仅仅是setHouseId(int hId)
,为什么不只有setHouse(House h)
?然后,您可以在合同上设置一个getAddress()
,只需委托给this.house.getAddress()
。
那时就没有必要使用注册表。
然后,您将获得在JList的每个元素中显示的所有信息,这对自定义渲染器很有用。