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
'programing' 카테고리의 다른 글
노드 모듈이 있는 경우 '@vue/cli-plugin-babel' 모듈 때문에 vue-cli-service가 충돌할 수 있습니까? (0) | 2022.07.10 |
---|---|
Nuxt, Vuex 저장소를 별도의 파일로 분할하면 오류가 발생함: 알 수 없는 변환 유형: 로그인 (0) | 2022.07.10 |
Laravel API - 페이지를 새로고침한 직후에 인증이 동작합니다. (0) | 2022.07.10 |
경고: 내장 함수 'xyz'에 대한 호환되지 않는 암묵적 선언입니다. (0) | 2022.07.10 |
Vue CLI Favicon (0) | 2022.07.10 |