2013-03-03 1 views
0

DefaultListModel에 저장되어 JList에 할당 된 객체 Person (int age, String name)의 목록이 있습니다.모델의 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?

+0

여기에 토론을 읽고있는 사람의 이름을 반환하기 위해 Person 클래스의 toString() 메서드를 오버라이드 (override) 의미 : http://stackoverflow.com/questions/15173325/execute-an-action-when-an -item-on-the-the-combobox-is-selected-netbeans/15173525 – camickr

답변

3

뷰의 디스플레이는 ...

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; 
    } 
} 

이 목록에, 당신이 할 필요가 렌더링에 적용 할 ... ListCellRenderer

뭔가 등의 도메인해야

jList1.setCellRenderer(new PersonCellRenderer()); 
자세한 내용은 Writing a Custom Cell Renderer에서 봐

+0

및 사용자 지정 KeySelectionManager 작성하는 것을 잊지 마세요. 렌더러를 사용하면 콤보 상자의 기본 기능이 손상되기 때문입니다. – camickr

+0

@camickr Hahaha, 그것이오고 있다는 것을 알았습니다.) - 그러나 JList는 KeySelectionManager를 지원하지 않습니다. – MadProgrammer

+0

주의를 기울이지 않았습니다 :) 귀하의 권리는 JList에 대한 것입니다. 대신에, JList의 getNextMatch (...) 메소드를 오버라이드 (override) 할 필요가 있습니다.이 경우, KeySelectionManager를 플러그 인하는 것보다 나 빠지게됩니다. 이것은 내가이 접근법을 싫어하는 또 다른 이유입니다. 사용자는 코드를 신경 쓰지 않고 표준 기능을보고 싶어합니다. Person 클래스에 Comparable을 구현하는 것을 잊지 마세요. 목록에 표시 될 때 적절한 순서로 사람들을 정렬 할 수 있습니다. 많은 추가 작업이 필요합니다. – camickr

1

S

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(); 
    } 
}