2012-02-15 2 views
2

두 개의 열이있는 테이블이 있습니다 : 특성 및 값! 속성은 enum입니다. 이제 enum 클래스의 셀 렌더러를 설정합니다 (소문자로 표시해야 함).열거 형의 표 셀 렌더러

문제는 테이블이 렌더러를 호출하지 않는다는 것입니다.

열거 (단지 예) :

public enum Attribute { 
    BLUE,BLACK,RED; 
} 

셀 렌더러 :

public class AttributeTableCellRenderer 
    extends 
     AbstractTableCellRenderer<Attribute> { 
    @Override 
    protected Object getText(Attribute attribute) { 
     System.out.println("call"); 
     if (null == attribute) { 
      return null; 
     } 
     return attribute.toLowerCase(); 
    } 
} 

표 (단지 예) : 당신은 당신의 자신의 구현을 제공 할 필요가

// table model 
Vector<Object> v; 
Vector<String> header = new Vector<String>(Arrays.asList("attribute", "values")); 
Vector<Vector<?>> data = new Vector<Vector<?>>(); 
// fill with data 
for (final Attribute attribute : Attribute.values()) { 
    v = new Vector<Object>(); 
    v.add(attribute); 
    v.add("blah"); 
    data.add(v); 
} 
//table 
TableModel tm = new DefaultTableModel(data, header); 
JTable table = new JTable(tm); 
table.setDefaultRenderer(String.class, new DefaultTableCellRenderer()); 
table.setDefaultRenderer(Attribute.class, new AttributeTableCellRenderer()); 
// will work 
//table.setDefaultRenderer(Object.class, new AttributeTableCellRenderer()); 

답변

4

을 구현하고 th를 반환하는 AbstractTableModel 전자 칼럼.

배경 : 테이블 구현은 각 셀의 값을 렌더러에 매핑하지 않고 모델에 전체 열의 클래스를 요청합니다.

+3

DefaultTableModel # getColumnClass()를 재정 의하여 DefaultTableModel 기능을 유지할 수 있습니다. –

+0

아의 아. 나는이 방법을 무시하는 것을 잊는다. 때때로 당신은 명백한 것을 그리워합니다. :-) 고마워요! –

관련 문제