=====================================================================================
출처: http://youngflow.tistory.com/archive/200804
===================================================================================================
원문 : http://java.sun.com/products/jfc/tsc/articles/painting/index.html
repaint()가 paint()를 호출하는 데 시간적인 지연을 두는 정책이 있기 때문입니다.
대개의 프로그램에서는 이런 시간적 지연에 의해서 생기는 영향이 전혀 없다고 합니다. JPanel는 JPanel~JComponent~Container~Component 이렇게 상속합니다. 상위 클래스인 Component의 API를
열어 보면, 최종적인 repaint()의 선언이 있고, 그 주석에 이렇게 나와 있습니다.
: repaint 메소드는 가능한 빨리 paint 메소드를, 혹은 update 메소드를 호출한다.
paint 메소드는 실제적으로 업무를 paintComponent, paintBorder, paintChildren 메소드에게
떠넘긴다.
만약 다중(multiple)적으로 쓰이는 repaint 메소드가 첫번째 repaint 메소드의 호출이 끝마쳐 지기도 전에
호출된다면, 다중적 호출은 아마 붕괴 되어서 단일(single) update 메소드 호출만 남겨 둘 겁니다.
다중 호출이 어느 때 붕괴되어야만 하는 가에 대한 방법론은 적용환경에 따라 다릅니다(implementation-dependent). 만약 다중 호출이 무너진다면(collaped), update된 결과는 무너진(겹쳐진의 의미도 있음)
호출들의 결과의 조합과 같게 됩니다."
this.repaint();
→ 얘가 반복적으로 호출이 안 되는 이유는..
lightweight compoenet를 위한 app-triggered 방식의 repaint 메소드가 for구문 안에서 heavyweight
compoment처럼 쓰였기 때문입니다. repaint 메소드는 update 메소드를 호출하고 그 update 메소드가
다시 paint 메소드를 호출하면서, 완성된 compoenet 그려내기 위해 시간적 지연을 정책적으로 두고
있는데, heavy하게 쓰이는 for 구문이 여기서 light하게 쓰이는 repaint 메소드의 시간 지연 정책에 걸려든
거라고 봅니다. 따라서 그런 시간 지연 정책을 무시하고 for 구문 안에서 바로 paint 메소드를 호출하면,
heavy한 for 구문안에서 UI가 다시 그려지는 결과를 얻게 됩니다.
-------------------------------------------------------------------------------------------------
즉, this.repaint() 메서드 호출 대신 paint(this.getGraphics()) 메서드 호출로 바꾸라는 소리다.
( this.repaint() → paint(this.getGraphics()) )
일반적으로 repaint() 메서드를 호출하는 이유는 상위 컴포넌트(ancestor)에서부터 하위 컴포넌트
(child)까지 paint() 메서드를 적용하기 위해서이다. 그리고 repaint() 메서드를 사용할 경우,
이러한 반영을 위해 Event Dispatch Queue에 Paint를 등록하고 시간 지연 정책이 적용된다.
따라서 단순히 반복적으로 특정 컴포넌트에 paint() 메서드를 반영하기 위해서는 paint() 메서드를 직접 호출하면 된다는 것이다.
===================================================================================================
'IT_Programming > Java' 카테고리의 다른 글
XML 문서에 Binary Data를 Insert하는 방법 (0) | 2010.02.05 |
---|---|
JDOM (The Java DOM) (0) | 2010.02.02 |
Java(JDK) 7 특징 (0) | 2009.11.26 |
자바 성능을 결정 짓는 코딩 습관과 튜닝 이야기 정리 13 ~ 23 (0) | 2009.10.10 |
자바 성능을 결정 짓는 코딩 습관과 튜닝 이야기 정리 3 ~ 12 (0) | 2009.10.10 |