스크롤 창 내부에 커다란 그래프를 그리는 루틴이 있습니다. scrollpane에 추가하기 전에 페인트하기에는 너무 큽니다. 목적인 요구 사항은 여러 가지 일 것입니다.내 jscrollpane이 Java 스윙에서 이상한 페인트 호출을하는 이유는 무엇입니까?
그래프의 크기 때문에 스크롤 패널의 자식의 페인트 메서드 내에서 차트를 렌더링하고 있습니다. 잘 작동하지만 스크롤 막대를 움직일 때마다 페인트 루틴이 두 번 호출된다는 사실을 알게되었습니다. 한 번은 펼쳐진 영역과 동일한 클리핑 영역을 사용하고 두 번째는 클립 영역을 뷰포트의 크기와 같게합니다. . 내가이 깜박 거림의 원인이되는 페인트 루틴 내에서 렌더링하기 때문에 ...
java.awt.Rectangle[x=0,y=195,width=245,height=3]
java.awt.Rectangle[x=0,y=3,width=245,height=195]
: 예를 들어
내 뷰포트는 다음과 같이 내 페인트 루틴이 g.getClipBounds()
세트로 불려갑니다 내가 3 개 픽셀 아래로 스크롤 245x195 & 경우 (내가 할 수있는 한 빨리 계산을 수행하지만 추측 할 수없는 지연이 있습니다.) 질문 :
누구나 2 차 페인트 호출을 방지하는 방법을 알고 있습니까? 이것은 평범한 jane JScrollPane입니다. 컴포넌트를 가지고 스크롤 패널에 추가하고, 스크롤 컴포넌트를 부모 컴포넌트에 추가합니다. 첫 번째 이미지 스크롤 데모 @the swing tutorial에서도이 동작을 볼 수 있습니다.
# 1에 대한 답변이 '아니요'인 경우 : 누구든지이 문제를 해결할 수있는 좋은 방법이 있습니까? 어떤 종류의 이미지 버퍼에 페인트해야합니까, 최근 페인트 호출을 추적하십시오 & 가능하면 이미지를 복사 하시겠습니까? 이것이 렌더링보다 훨씬 빠르다는 것을 상상할 수는 없지만 어떤 통찰력이라도 알 수 있습니다 .-)
내 유일한 문제는 전체 이미지를 버퍼링 할 수 없다는 것입니다. 너무 큽니다. 버퍼링 된 섹션을 그린 상태로 유지해야하므로 필요에 따라 페인트()하고 함께 바느질 할 때 적용 범위를 확인하십시오. 나는 그것을 시도해 볼 것 같지만 아무도 다른 아이디어가 있는지 보지 않을 것이다. –
글쎄, 이중 버퍼링이 여전히 생겨날 수있다. 스크린 밖의 표면 (보이는 부분의 크기)에서 필요한 것을 렌더링하십시오. 그리고 작업이 끝나면 전체 이미지를 디스플레이 표면에 그려 넣으십시오. – colithium
실제로이 방법이 효과적입니다.고마워요 :-) 스크롤은 조금 느리지 만 깜박임은 사라졌습니다. 미안해. 처음에는 못 봤어. 내 어리 석음은 너의 인내심에 맞지 않았다 ;-) –