2009-10-06 5 views
1

Java에서 setClip에 문제가 있습니다. JPanel을 확장하는 클래스가 있습니다. 그 클래스 안에서 나는 paintComponent 메소드를 오버라이드했다. 나는 클립 지역의 면적이 반복적으로 그린 ​​것 같다 것입니다보고 있어요Java setClip을 다시 그리는 것처럼 보입니다

paintComponent { 
    //draw some lines here 
    Rectangle whole = g2.getClipBounds();//g2 is my Graphics2D object 
    Rectangle part = <some rectangle that is a part of the whole paintable area>; 
    g2.setClip(part); 
    //draw some more stuff here 
    g2.setClip(whole); 
} 

문제 : 내의 paintComponent 방법은 다음과 같이 보인다. 예를 들어, 페인트 칠을 말하면 괜찮습니다. 그런 다음, 창을 전환하거나 다른 방법으로 동일한 작업을 다시 그릴 경우 클리핑 된 영역은 지워지지 않고 나머지는 지워집니다. 이렇게하면 잘린 영역의 페인팅이 나머지 페인트 가능 영역보다 굵게 표시됩니다.

setClip 작동 방식에 뭔가 빠졌다고 상상해 봅니다.

모든 의견을 많이 주시면 감사하겠습니다. 모든 도움을 미리 감사드립니다.

+0

'setClip'은 거의 당신이 원하는 것이 아닙니다. 일반적으로 클립 영역을 바꾸는 대신 작게 만들어야합니다. IIRC, 지난 번에 스윙에서 모든 용도가 버그였습니다. –

+0

그래서 첫 번째 setClip은 괜찮습니까 (클립 영역이 줄어들 기 때문에). 그러나 두 번째 setClip을 대체해야합니까? 클립 영역을 어떻게 재설정합니까? 일부 장소에서 setClip (null)을 사용하여 클립 영역을 재설정 할 것을 제안했지만 그 부분은 도움이되지 않습니다. – Ryan

+0

'Graphics' 객체가 왔을 때 이미 클립 영역이 설정되어있을 수 있습니다. 그 클리핑을 존중해야합니다. –

답변

2

새 그래픽 객체를 생성하면 이전 트릭에서 나왔습니다. 감사합니다 톰!