【问题标题】:JList with customised elements具有自定义元素的 JList
【发布时间】:2014-06-18 08:31:00
【问题描述】:

我有一个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 中,我想显示来自 House 类的 address。但我仍然需要元素类型为Contract 或对Contract 的引用。如何做到这一点?

【问题讨论】:

标签: java swing class arraylist jlist


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    Contract 类中没有setHouseId(int hId),为什么不直接使用setHouse(House h)?然后,您可以在 Contract 上拥有一个 getAddress(),它只会委托给 this.house.getAddress()

    这样就不需要注册表了。

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

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 2013-09-29
      • 2021-09-07
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2019-08-12
      相关资源
      最近更新 更多