문제

내 솔루션을 찾았을 때 누군가가 나에게 뭔가를 설명해주기를 바랐지만 그것이 왜 작동하는지 이해하지 못합니다.생성 시 개체가 어디에 있는지 알지 못한 채 클래스 유형별로 기본 렌더러를 전체 테이블에 설정하고 싶었습니다.

나는 JTable을 선언하고 기본 렌더러를 내 렌더러로 설정했습니다. Calendar 수업이 가능하도록 Calendars는 단순한 표현이 아닌 의미 있는 표현을 제공할 것입니다. toString() 스스로.

JTable table = new JTable();
table.setDefaultRenderer(Calendar.class, new MyRenderer());

public class MyRenderer extends DefaultTableCellRenderer{
    public MyRenderer() { super(); }
    @Override
    public void setValue(Object value){
            setText(makeCalendarToDate((GregorianCalendar)value));
    }
}

이 방법은 메서드를 재정의할 때까지 작동하지 않습니다. getColumnClass 했던 대로 여기

태양의 말에 따르면 선적 서류 비치, 그것은 다음과 같습니다 getColumnClass 위에 제시한 예에서 재정의된 작업을 정확히 수행해야 합니다. 해당 메서드를 재정의할 때는 작동하지만 스톡 구현을 종료할 때는 작동하지 않는 이유는 무엇입니까?

이제 열을 채울 수 있습니다. Calendar그들이 0번째 행을 채우는 것을 기다리고 있는데, 이것이 바로 제가 원했던 것입니다. 하지만 애초에 제가 그렇게 하지 못하게 막았던 것은 무엇입니까?

도움이 되었습니까?

해결책

JTable은 모델에서 열 클래스를 가져옵니다.대답은 테이블 모델의 기반이 되었다고 가정할 때 AbstractTableModel의 구현에 있습니다.AbstractTableModel에서 getColumnClass는 다음과 같이 구현되었습니다. return Object.class; 따라서 재정의하지 않는 한 열 개체는 항상 개체로 처리됩니다.이는 모델이 자동으로 처리하는 것이 아닙니다.getColumnClass를 재정의하면 됩니다. 다른 방법은 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top