커스텀 컨트롤을 만들 때 주로, Canvas를 상속받게 되는 데, 이 컨트롤이 애니메이션 요소를 갖고 있다면, 화면이 심하게 깜박거리는 것을 볼 수 있습니다. 이와 관련한 질문에는 더블 버퍼링을 쓰라는 답변이 많고, 코드까지 딸려있는데, 그래도 플리커링은 멈추지 않습니다. Canvas는 paint이벤트를 받으면, 스타일 플래그를 대조하여 SWT.DOUBLE_BUFFERED 값이 0이면 무조건 화면을 지우고 다시 그리기 때문에, 버퍼에 랜더링된 이미지를 한번에 찍는다 해도, 그 전에 지우는 과정이 눈에 보이기 때문입니다.

아래와 같이 생성자를 변경하면, 그리기 코드에 수동 버퍼나, 오프 이미지등과 같은 테크닉을 사용하지 않더라도 자동으로 더블 버퍼됩니다.

Canvas c = new Canvas(parent, SWT.DOUBLE_BUFFERED);
Posted by 지이이이율
,