AWT setVisible(false)에 대해서

보통 컴포넌트는 컨테이너 add 되어 사용되어진다.

Panel panel = new Panel();
Label label = new Label(“NAME CARD”);
panel.add(label);


화면의 부드러운 표현을 위해 더블 버퍼링을 쓸 경우가 있는데, 이때 더블 버퍼링이 필요한 해당 객체-컴포넌트-단위로 더블 버퍼링을 구현해야지, 컴포넌트가 add되어 있는 컨테이너를 더블 버퍼링 구현하면 예상치 못한 경우가 발생한다.

이는 setVisible(false)를 통해 해당 컴포넌트를 표시하지 않을 경우, 상위 컨테이너의 update()메소드를 호출하여 화면을 지우고(clearRect()) setVisible(true) 상태의 자식 컴포넌트를 그리기 때문이다.

이때문에, 컨테이너의 update()를 오버라이딩할 경우, 지우는 효과가 없어져(clearRect()) 기존 그림이 그대로 남아있게 된다.

물론, 오버라이딩 이후 따로 화면 정리 코드를 삽입하면 달라지겠다.

Leave a Comment