0

我有一个对象列表,这些对象Person (int age, String name)存储在DefaultListModel要分配给JList.

DefaultListModel model;
model = new DefaultListModel();

Person p = new Person(43,"Tom");
//insert in the model
model.add(size, p);

jList1.setModel(model);

我只想在 中显示名称JList,但如果不使用另一个名称列表(我希望避免),我无法弄清楚如何做到这一点。

有没有简单的方法来告诉JList对象的哪个属性Person要显示?

4

2 回答 2

3

视图的显示应该是ListCellRenderer

就像是...

public class PersonCellRenderer extends DefaultListCellRenderer {
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if (value instanceof Person) {
            setText(((Person)value).getName());
        }
        return this;
    }
}

要将渲染应用于列表,您需要执行...

jList1.setCellRenderer(new PersonCellRenderer());

查看编写自定义单元格渲染器以获取更多信息

于 2013-03-03T23:35:46.430 回答
1

只需重写 Person 类的 toString() 方法即可返回 Person 的名称

DefaultListModel model;
model = new DefaultListModel();

Person p = new Person(43,"Tom");
//insert in the model
model.add(size, p);

jList1.setModel(model);

public class Person {

  private int age;
  private String name;

  public Person(int age, String name) {
    this.age = age;
    this.name = name;
  }

  public String getName() {
    return name;
  }

  public String toString() {
    return this.getName();
  }
}
于 2013-06-05T18:41:06.573 回答