2011-11-17 6 views
1

내 응용 프로그램에서 JTree를 사용하고 있습니다. 대부분의 경우에 잎 노드를 선택하면 파란색 배경으로 표시됩니다 (괜찮습니다). 그러나 어떤 경우에는 어떤 이유로 파란색 배경을 얻지 못합니다 (이 잎 노드를 선택하기위한 이벤트 처리가 작동 함에도 불구하고). 여기에 문제가 될 수있는 단서가 없습니다 ... 분기 노드 앞의 작은 아이콘으로 선택 후 분기 노드를 확장하거나 축소하면 선택 영역이 표시됩니다. 나는이 행동으로 꽤 혼란스러워. 어디에서이 문제를 파헤 치기 시작할 수 있습니까?JTree 선택 색상

+0

은 버그와 비슷하게 들릴 수 있습니다. 첫 번째 추측은 다시 그리는 문제입니다. 어떤 이유에서든 다시 그리기가 발생하지 않습니다. 그 가정을 확인하기 위해, 아무 것도하지 않고 다시 칠하기를 강요하는 어딘가에 버튼을 추가하십시오. 다음 번에 문제가 발생하면 버튼을 누릅니다. 아무 일도 발생하지 않으면 노드가 실제로 선택되지 않았으며 선택 논리가 잘못되었습니다. 이제 올바르게 그렸습니다. 어딘가에 알림 문제가 있습니다. 노드가 선택되었지만 상태 변경이 트리에 전달되지 않았습니다. – kleopatra

+0

힌트를 보내 주셔서 감사합니다. 내 선택 리스너 'valueChanged'의 끝에서 다시 그리기 메서드를 호출하고 일부 리프 노드에 대해 throw 된 RuntimeException으로 인해이 메서드의 끝에 도달하지 못했음을 알게되었습니다. 대신 예외 처리는 문제를 해결했습니다. – July

+0

흠, 이제는 내 문제에 답변 할 수 없기 때문에 해결 된 것으로이 문제를 표시 할 수 없습니다 ... – July

답변

0

JTree는 (& F를 변경하지 않는 한) 에 DefaultTreeCellRenderer을 사용합니다. getTreeCellRendererComponent 메서드를 보면이 방법이 도움이 될 것입니다. 이 문제를 쉽게 복제 할 수 있다면이 방법으로 일부 디버깅이 원인을 밝힐 수 있습니다.

+0

셀 렌더러를 재정의하고 '금속'L & F에서는 잘 작동하지만 GTK +에서는 다른 렌더러와 함께 렌더러를 사용하며 이상하게 작동합니다. L & F 영향을 방지 할 수있는 방법이 있습니까? – SomethingSomething