带有自定义元素的JList

时间:2014-05-01 19:17:31

标签: java swing class arraylist jlist

我有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。但我仍然需要元素类型为ContractContract的引用。怎么办呢?

2 个答案:

答案 0 :(得分:2)

您需要实现自定义单元格渲染器,无论如何这都是一个好主意(在任何实际应用程序中)。 渲染器(swing组件)将获取Contract对象,并可从中获取房屋数据 Here是Oracle的教程 高级:您可以在模型中混合类,并按here分类切换 (那个是JTables,但它基本上是一样的。)

答案 1 :(得分:1)

无论您采用可视化的Swing方法(即已建议的自定义渲染器),请考虑为您的类使用合成。

在Contract类中,不仅仅是setHouseId(int hId),为什么不只有setHouse(House h)?然后,您可以在合同上设置一个getAddress(),只需委托给this.house.getAddress()

那时就没有必要使用注册表。

然后,您将获得在JList的每个元素中显示的所有信息,这对自定义渲染器很有用。