2011-08-04 1 views
1

Java 1.5에서 1.6으로 응용 프로그램을 마이그레이션하고 있습니다 (예, 알고 있습니다).JTable 고정 열이 스크롤되지 않음 (Java 1.6)

일부 고정 된 열이있는 테이블이 있습니다.

JScrollPane tablePane = new JScrollPane(); 
JTable mainTable = new JTable(); 
JTable frozenTable = new JTable() 
JPanel rowHeaderPanel = new JPanel(); 
rowHeaderPanel.add(frozenTable); 

tablePane.setRowHeaderView(rowHeaderPanel); 
tablePane.setViewportView(mainTable); 

때문에 (대략)처럼 건설

우리는 자바 1.5에 따라 원하는대로이 일, 즉 (주 및 frozenTable 표 모델은 항상 같은 수의 행이) : 우리는 함께 데이터 테이블을했다 왼쪽에 여러 개의 고정 된 열이 있습니다. 창을 세로로 스크롤하면 두 테이블이 조화롭게 스크롤됩니다.

Java 1.6으로 이동하는 것 외의 코드 변경없이 간헐적 인 (개발 환경에서) 재현 불가능한 버그가 있습니다.

때로는 수직으로 스크롤 할 때 메인 테이블 만 스크롤됩니다. 고정 된 테이블은 전혀 스크롤하지 않습니다. 테이블이 링크 해제 된 것처럼 보입니다.

누구나 전에 본 것과 같은 사람이 있습니까?

답변

2

이전과 같은 것을 보지 못했고 재현 할 수 없으므로 디버깅하기가 어려울 수 있습니다. 가능한 한 작은 예제 (기본적으로 SCCEE)로 파싱하고 동작을 재현하는지 확인하는 것이 좋습니다. 여전히 간헐적으로 존재한다면 1.6과 관련이 있을지 모르나 나는 의심 스럽다. 더 이상 존재하지 않으면 동시에 백그라운드에서 다른 일이 발생할 수 있습니다.

+0

동의 - 이것은 우리에게 많은 생산 사용자가 외쳤지 만 힘든 일입니다. 우리가 1.6으로 옮긴 후 분명히 나타났습니다. 우리가 처음 본 제작 릴리스는 이전 1.5 릴리스와 똑같은 코드 였지만 재 컴파일되었습니다. 이 코드를 둘러싼 실제 코드는 상당히 초기 스윙 코드입니다. 재현성이 없으면 실제로는 불가능하지만 아무것도하지 않으면 옵션이되지 않습니다. – ashbyp

+0

내 생각 엔 끔찍한 스윙 코드에있는 것 같습니다. 어쩌면 오늘의 스윙을 사용하여 처음부터 다시 쓸 수 있습니다. – jzd

+0

@jzd Java 1.5의 현재 빌드가 버그 (사용자 정의 테이블)를 기반으로 한 다음 변경 사항이 많습니다. 코드에 대해 +1 – mKorbel

4

간헐적 인 문제의 성격에 따라 GUI 구성 요소가 event dispatch thread에 구성되었는지 확인하는 메시지가 나타납니다. 1.6으로의 이전은 그러한 변칙을 드러내기에 충분할 정도로 타이밍을 변경했을 수도 있습니다.

2

동의합니다. 힘든 문제입니다. 그러나 우리가하는 방식은 약간 다르며 현재 Java 6에서 프로덕션 환경에서 작동합니다. 따라서 IMO 문제를 해결하는 데 도움이 될 수 있습니다. 초기 코드에서와 같은 변수 이름을 사용하려고했습니다. 다음은 우리가 사용하는 코드입니다.

JViewport viewport = new JViewport(); 
viewport.setView(frozenTable); 
viewport.setPreferredSize(frozenTable.getPreferredSize()); 
tablePane.setRowHeaderView(viewport); 
tablePane.setCorner(JScrollPane.UPPER_LEFT_CORNER,frozenTable.getTableHeader()); 
+0

덕분에 다시 정리할 것입니다. 그러나 이것이 스레드 문제 일 수 있다고 생각합니다. trashgods 제안마다. 문제는 문자 그대로 100 개의 코드에서 확인 및 확인해야 할 장소가 있다는 것입니다. 스레딩 문제 - arrgh. 나는 누군가가 전에 보았던 것이 단순했다는 것을 희망했다. – ashbyp