2014-12-16 17 views
1

나는 스윙에서 사용자 정의 렌더링을 설정하기 위해 JTable#setDefaultRenderer을 사용하고있었습니다.JXTable의 맞춤 헤더 렌더러?

내가 이해 한대로 SwingX에서이 메서드는 DefaultTableRenderer의 인스턴스를 전달해야합니다. 매우 맞춤화 된 그림이 필요하면 DefaultTableRenderer을 내 맞춤과 함께 초기화 할 수 있습니다. ComponentProvider

렌더러 함수가 제공자의 것으로 옮겨졌습니다.

이제 헤더를 어떻게해야할까요?

스윙에서

내가 SwingX에 무엇을해야합니까

getTableHeader().setDefaultRenderer(new MyHeaderRenderer()); 

을하고 있었다? DefaultTableRenderer을 다시 사용 하시겠습니까? 계약이기 때문에

답변

1

내가 알 수있는 바와 같이, SwingX이 방법은, 당신이 // 사용 DefaultTableRenderer에 있어야합니다 있어야 언급하지 않았다 DefaultTableRenderer

의 인스턴스를 전달해야 JTable에서 상속되며 TableCellRenderer 인터페이스 호환 객체가 필요합니다.

그것은 DefaultTableRenderer 수 있고 here 설명한 바와 같이 우리는하는 CellContext에 기초하여, 렌더링 컴포넌트 생성을 위임 ComponentProvider<?> 활용할 수 . 그러나 DefaultTableCellRenderer 또는 인터페이스 (for example)를 충족하는 모든 구현이 될 수도 있습니다.

setDefaultRenderer(Class class, TableCellRenderer renderer) 메서드가 오버라이드되어 렌더러가 DefaultTableRenderer 인스턴스가 아니고 렌더러가 StringValue 인터페이스 호환 객체 인 경우 문자열 표현을 동기화하는 것이 사실입니다. 우리는 소스 코드에서 그것을 볼 수 있습니다

public class JXTable extends JTable implements TableColumnModelExtListener { 

    ... 

    /** 
    * {@inheritDoc} <p> 
    * 
    * Overridden to synchronize the string representation. If the renderer is of type 
    * StringValue a mapping it will be used as converter for the class type. If not, 
    * the mapping is reset to default. 
    */ 
    @Override 
    public void setDefaultRenderer(Class<?> columnClass, 
      TableCellRenderer renderer) { 
     super.setDefaultRenderer(columnClass, renderer); 
     getStringValueRegistry().setStringValue(
       (renderer instanceof StringValue) ? (StringValue) renderer : null, 
         columnClass); 
    } 

    ... 
} 

그래서이 모든 말했다 데, 난 당신이 중 하나를 테이블 헤더에 DefaultTableRenderer를 사용하는 의무가 있다고 생각하지 않습니다. 테이블 머리글은 JTableHeader (getTableHeader() 메서드는 내가 아는 한 재정의되지 않았습니다.)이며 여전히 TableCellRenderer 호환 개체를 기본 렌더러로 설정해야합니다.