2009-09-30 2 views
5

나는 'No', 'X [mm]', 'Y [mm]'헤더에 다음 값을 갖는 3 개의 열이있는 테이블을 가지고 있습니다. 이 테이블에는 밀리미터 단위의 점 좌표가 들어 있습니다. 인치로 좌표를 표시하려면 테이블을 다시 채워야하는지 확인하는 확인란이 있습니다. 또한 열 머리글 값은 '아니요', 'X [in]', 'Y [in]'이어야합니다.동적으로 JTable에서 열 머리글 텍스트를 변경합니다.

간단히 말해서 테이블의 헤더 텍스트를 동적으로 변경하려고합니다.

상세 정보 : 테이블은 JTable의 서브 클래스입니다. 게다가 'DefaultTableModel'의 하위 클래스가 테이블의 모델로 설정되었습니다. 데이터 모델 하위 클래스의 생성자에서 헤더 값을 제공했습니다.

아이디어가 있으십니까? 내 응용 프로그램은 jdk v1.4 와만 호환되므로 솔루션이 verion과 호환되면 좋을 것입니다.

답변

24

사용자가 직접하는 TableColumnModel를 업데이트 할 수 있습니다 : 모델 tableStructureChanged "변경되거나 될 때까지에만 작동 원인

JTableHeader th = table.getTableHeader(); 
TableColumnModel tcm = th.getColumnModel(); 
TableColumn tc = tcm.getColumn(0); 
tc.setHeaderValue("???"); 
th.repaint(); 
+0

를 사용 "해고됐다. 그런 다음 열 텍스트가 모델에서 다시 읽혀집니다. –

+3

이것이 문제인 경우 테이블이 처음 생성 된 후 table.setAutoCreateColumnsFromModel (false)을 사용할 수 있습니다. – camickr

+0

+1. 훌륭하게 작동합니다. 감사. – Withheld

2

여기서 테스트 할 수는 없지만이 방법이 '[DefaultTableModel.setColumnIdentifiers(...)][1]'이면 원하는대로 할 수 있습니다.

기본적으로 'DefaultTableModel.getColumnCount()'을 실행하면 이미 알고있는 경우가 아니면 얼마나 많은 열이 있는지 확인할 수 있습니다. 그런 다음 'DefaultTableModel.getColumnName(int ColumnIndex)'을 실행하여 각각의 이름을 얻은 다음 원하는 방식으로 배열에 넣습니다. 그 다음에 'DefaultTableModel.setColumnIdentifiers(...)'을 사용하여 다시 설정합니다.

희망이 도움이됩니다.

8

이있는 경우 열 번호가 코드이 100 % 해결책이 아니다

jtable.getColumnModel().getColumn(5).setHeaderValue("newHeader"); 
+1

테이블을 업데이트하려면 코드 뒤에'jtable.getTableHeader(). repaint();'를 호출해야합니다. – Amin

관련 문제