programing

Java Swing revalidate() vs repaint()

bestcode 2022. 7. 10. 21:20
반응형

Java Swing revalidate() vs repaint()

JPanel의 콘텐츠를 자주 교체하고 싶은 Swing 어플리케이션을 만들고 있습니다.이렇게 하기 위해 전화드렸습니다.removeAll()새 콘텐츠를 추가한 후 호출합니다.revalidate().

그러나 새 컨텐츠에 의해 가려지긴 했지만, 이전 컨텐츠는 아직 실제로 볼 수 있습니다.콜을 에 추가하는 경우repaint()에 더하여revalidate()정상적으로 동작합니다.

다른 경우엔 전화하는 것만으로revalidate()충분합니다.

따라서 기본적으로 두 기능을 모두 호출해야 하며, 호출하지 않으면 언제 각각 호출해야 합니까?

전화하셔야 합니다.repaint()그리고.revalidate()전자는 Swing에게 윈도우의 영역이 더럽다고 말한다(이것은 제거된 오래된 아이들의 이미지를 지우는 데 필요하다).removeAll()후자는 레이아웃 매니저에게 레이아웃을 재계산하도록 지시합니다(컴포넌트를 추가할 때 필요합니다).이로 인해 패널 하위가 다시 도장되지만 패널 자체는 도장되지 않을 수 있습니다(재도장 트리거 목록은 이 항목을 참조하십시오).

좀 더 일반적인 설명을 하자면, 원래 패널을 재사용하기보다는 새 패널을 만들어 부모 패널로 교환하는 것이 좋습니다.

remove() 또는 removeAll()을 실행할 때는 언제든지 호출해야 합니다.

  validate();
  repaint();

새로운 컴포넌트 추가() 완료 후.

remove()를 실행할 때는 validate() 또는 revalidate()를 호출해야 합니다.관련 자바독을 참조해 주세요.

제 테스트 결과 repaint()도 필요한 것으로 나타났습니다.이유는 정확히 모르겠어요.

revalidate새 구성 요소가 추가되거나 이전 구성 요소가 제거되면 컨테이너에서 호출됩니다.이 콜은 레이아웃 매니저에게 새로운 컴포넌트목록을 기반으로 리셋하도록 지시하는 명령입니다. revalidate는 컴포넌트가 생각하는 '경계 영역'을 다시 그리기 위한 호출을 트리거합니다.확실히 모든 지역이JPanel더러움으로 간주됩니다.RepaintManager.

repaint컴포넌트에 다시 도색하도록 지시하는 데 사용됩니다.많은 경우, 이러한 상태를 정리하기 위해 이 호출을 해야 합니다.

revalidate()컨테이너 레이아웃을 요청하기만 하면 됩니다.단순히 전화를 걸 수 있습니다.revalidate()동작합니다. 이는 하위 컴포넌트 경계의 업데이트로 인해 발생할 수 있습니다.repaint()★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★되지 않습니다.이 no는 컴포넌트 경계는 변경되지 않습니다.안 되다repaint()"실제로" 트리거됩니다.

yes repaint(); revalidate(); revalidate(); removeAll()을 호출할 때는 repaint() 및 revalidate()를 호출해야 합니다.

언급URL : https://stackoverflow.com/questions/1097366/java-swing-revalidate-vs-repaint

반응형