개발중인 스윙 앱에서 계속 페인트 칠하는 데 이상한 문제가 있습니다. 나는 특정 구성 요소의 텍스트를 설정할 때 (화면의 맨 아래에있는 상태 표시 줄의 텍스트 레이블 일뿐) 화면의 매우 다른 영역에있는 전체 테이블을 다시 그리라고 말하고 있습니다. 기본적으로 전체 창에 상태 표시 줄 텍스트를 설정할 때마다 다시 그리기를 요청하는 것처럼 보이기 때문에 일부 성능 문제가 발생합니다.스윙 내에서 발생하는 불필요한 다시 그리기를 디버그하는 방법
무슨 일이 일어나고 있는지 RepaintManager 주위를 배회하고 있었고이 텍스트의 레이블을 설정하려고 할 때 내 전체 JPanel이 더티 컴포넌트로 표시된다는 것을 알았습니다. 그러나 에서 디버깅하는 데 문제가 있습니다. 어떤 점이 발생하고 있으며 정확히 인 이유는 무엇입니까? 전혀 발생하지 않습니다. 필자는 페인트 칠하는 시스템을 읽으려고했지만 다른 텍스트 레이블이 설정되어있을 때 중첩되지 않는 테이블을 다시 그리는 것이 왜 필요한지 알 수 없습니다.
스윙 탐색기를 사용하여 레이아웃 테두리를 시각적으로 보여 주면서 모든 것이 깔끔하게 겹치지 않고 모든 것이 잘되는 것처럼 보입니다.
JTable에 다시 그리기를 요청하는 호출 순서를 결정하는 방법을 찾고 있습니다. paintComponent()에 중단 점을 추가하고 스택을 따라 가면 RepaintManager의 paintDirtyRegions() 호출 내에서 끝나고, 전체 JPanel (창에있는 모든 내용 포함)은 tmpDirtyComponents 변수 안에 있습니다.
처음에는 단일 상태 텍스트 레이블을 설정할 때 내 JPanel이 더티로 표시되는 방법을 설명 할 수 있습니까? 그렇지 않은 경우 오류를 찾기 위해 어디서 연결해야하는지에 대한 지침을 제공 할 수 있습니까?
도움을 주셔서 감사합니다.
아마도 JComponent.invalidate에 중단 점을 넣어 더티 영역 생성의 원인인지 확인해야합니다. 물론, 디버거가 응용 프로그램에 끼어 들자 더러운 영역이 생기므로 응용 프로그램을 디버거와 별도로 유지하십시오. – MeBigFatGuy
네, 그 재밌는 일이 다시 칠판을 트리거 할 때 디버거에 초점을 맞추면 정말 재밌습니다. 다시 그리기 등을 유발하는 앱으로 돌아와야합니다. – krock