2014-03-28 4 views
0

빠르게 변화하는 데이터를 시각화하는 Java 프로그램이 있습니다. 나는 javax.swing.Timer을 계획하고 repaint()를 50 밀리 초마다 호출한다. 그러나 이것은 많은 CPU를 필요로합니다. 따라서 더티 영역 (데이터가 50ms 동안 실제로 변경된 부분)을 기록하기 시작한 다음 repaint(x, y, w, h);을 호출합니다. 여기서 인수는 다시 칠해야하는 더티 영역을 식별합니다. 이 문제는 CPU 문제를 해결했지만 다른 창/구성 요소가이 구성 요소를 가리킬 때 약간의 결함이 발생합니다.자바 스윙. 내 구성 요소 위로 이동 한 다른 구성 요소/창을 검색하는 방법은 무엇입니까?

이러한 경우를 감지하고 전체 구성 요소에 대해 repaint()을 호출하고 싶습니다. 그것을 감지하는 방법이 있습니까?

(SSCCE는 알려진 문제라고 생각하기 때문에 첨부하지 않으며 코드에서 분리하기가 쉽지 않기 때문에 필요한 경우에만 수행 할 수 있습니다.) 나는 이러한 경우를 감지 할

답변

1

,

제가 적용되는 프레임의 어떤 영역을 감지 할 수있는 방법을 알고하지 않습니다.

전체 부품에 대해 repaint()를 호출하십시오. 그것을 감지하는 방법이 있습니까?

아마도 WindowListener을 사용하고 windowDeactivated() 이벤트를 처리 할 수 ​​있습니다. 창에 포커스가 없으면 다른 창이 포커스 위에 표시 될 가능성이 큽니다. 대신 더러운 부분 자신을 추적

+0

감사합니다. 이미'WindowsListener'를 시도했지만 필요한 콜백을 제공하지 않습니다. – Serg

1

게다가, paintComponent() 메소드를 오버라이드 (override)하고 Component 당신이 필요로하는 어떤 영역을 칠하도록 통지합니다 Graphics 개체의 getClipBounds() 방법을 사용에 대해?

+0

getClipBounds() 메서드는 구성 요소의 경계를 반환합니다. 구성 요소가 부분적으로 다른 창에 의해 처리된다는 것을 인식하지 못합니다. – camickr