2011-11-28 3 views
3

내 열이 동적으로 확장되는 테이블이 있습니다. 처음에는 기본 정보에 5 개의 열이 있으므로 내 테이블 모델을 5 개의 열로 설정했습니다. 5 열의 2 열과 3 열은 단추입니다 (실제로는 단추의 형태로 된 하이퍼 링크입니다). 즉, 2 열과 3 열에 자체 렌더러와 편집기가있는 것을 의미합니다.새 열을 추가 할 때 CellRenderer 및 Editor가 재설정 됨

table.getColumnModel().getColumn(2).setCellRender(new MyCellRender()); 
table.getColumnModel().getColumn(2).setCellEditor(new MyCellEditor(table)); 
//more code for column 3 initializatation 

내 문제는 내가 모델에 열을 추가 할 때마다 새 열을 추가하여 확인할 수 있도록 행이 5 개 이상의 colums을 가질 수 있음을 거기에 시간입니다. 나는 새로운 열을 추가하기 위해

model.addColumn("ColumnName"); 

을 사용합니다. 문제는 초기 행보다 큰 새 행을 추가 할 때마다 문제입니다. 2 및 3 열의 렌더러와 편집기가 다시 설정되거나 사라지고 기본적으로 렌더링됩니다. 열 2와 열 3이 유지되도록하려면 무엇이 필요합니까? BTW 열 2와 3은 항상 단추로 렌더링되는 유일한 열입니다.

답변

3

는 처음에 사용할 수있는 테이블을 만듭니다. 당신이 TableColumns가가 자동으로 사용자 정의 렌더러/편집기를 잃지 않을 것 모델에서 생성되지 않기 때문에, 다른 열을 추가하고 싶지만 경우

지금, 지금 수동으로 TableColumns가를 만들어야합니다

String columnName = "Column X"; 
model.addColumn(columnName); 

// AutoCreate is turned off so create table column here 

TableColumn column = new TableColumn(table.getColumnCount()); 
column.setHeaderValue(columnNamer); 
table.addColumn(column); 
+0

고맙습니다! 간단한 해결책 나는 그것을 좋아한다. – jamesv

4

JTable에서 createDefaultColumnsFromModel을 재정의하고 특수 편집기/렌더러를 다시 설정할 수 있습니다. 모델을 변경하면 (자), getAutoCreateColumnsFromModel가 true의 경우, JTable는 columnModel를 재생성합니다. 당신이 새로운 칼럼을 추가 할 때 나는 이것이 사실로 남을 필요가 있다고 생각합니다. TableColumnModel입니다 및 TableColumns가 자동으로 생성됩니다

JTable table = new JTable(model); 
table.setAutoCreateColumnsFromModel(false); 
table.getColumnModel().getColumn(2).setCellRender(new MyCellRender()); 
table.getColumnModel().getColumn(2).setCellEditor(new MyCellEditor(table)); 

:

public void createDefaultColumnsFromModel() { 
    super.createDefaultColumnsFromModel(); 
    getColumnModel().getColumn(2).setCellRender(new MyCellRender()); 
    getColumnModel().getColumn(2).setCellEditor(new MyCellEditor(this)); 
} 
+0

매번를 새로운 열을 추가한다. createDefaultColumnsFromModel()을 호출 할 필요가있다. – jamesv

+0

아니요 테이블 모델에 열을 추가하면이 메서드는 JTable에 의해 자동으로 호출된다. 필요한 열에 에디터/렌더러를 다시 설정하기 만하면됩니다. –

관련 문제