2012-01-08 3 views
0

내 응용 프로그램에서 나는 변경 사항을 준수하는 View이 있습니다. ControllerView으로 발송되고 Model으로 업데이트되는 이벤트를 처리합니다.자바 MVC : 옵저버 패턴을 사용하여 뷰 업데이트

예를 들어 두 개의보기가 있다고 가정 해 보겠습니다. 첫째, InputView은 두 개의 JSpinner 요소 (Spinner1Spinner2)를 포함합니다. 둘째로, ResultView은 스피너의 값이 JLabel입니다. 추가 제약 조건으로 Spinner2의 값을 Spinner1의 값에 종속되게하고 싶습니다. 즉, Spinner2의 최소값은 현재 Spinner12x이어야합니다.

Spinner1의 값을 변경하면 ControllerChangeEvent이고 업데이트는 Model입니다. Spinner2 값을 조정해야하므로 또 ChangeEvent이 발송되고 Model이 두 번째로 업데이트됩니다. 이 스키마의 문제점은 각 ModelView 새로 고침을 업데이트 할 때 발생합니다. 따라서이 예에서 View은 하나가 아닌 3 또는 4 번 새로 고칩니다 (Spinner1 변경, Spinner2 최소값 변경, Spinner2 값 변경). 이로 인해 깜박 거림이 발생합니다.

모든 변경이 완료되면 View 업데이트가 한 번만 업데이트되도록하려면 어떻게해야합니까?

+0

깜박임에 대해 잘 모르기 때문에 SSCCE를 게시하십시오. 코드에 다른 재현적인 문제가 있어야합니다. – mKorbel

+0

깜박임으로써 결과적으로보기가 새로 고쳐집니다. 어떤 종류의 차트 나 단순한 라벨보다 복잡한 것을 사용한다면, 다중 리프레쉬가 가능할 것입니다. –

답변

2

gang-of-four book는 말한다 :?.?

는 "업데이트 제목을 유발하고 관찰자가 일관성을 유지하기 위해 알림 메커니즘에 의존하지만 실제로 업데이트를 실행하는 데 어떤 객체를 통지 호출 누가 여기에 두 가지 옵션이 있습니다

:

Have state-setting operations on Subject call Notify after they change the 
subject's state. The advantage of this approach is that clients don't have 
to remember to call Notify on the subject. The disadvantage is that several 
consecutive operations will cause several consecutive updates, which may be 
inefficient. 

Make clients responsible for calling Notify at the right time. The advantage 
here is that the client can wait to trigger the update until after a series 
of state changes has been made, thereby avoiding needless intermediate updates. 
The disadvantage is that clients have an added responsibility to trigger the 
update. That makes errors more likely, since clients might forget to call Notify. 

두 번째 옵션은 당신에게 사용 될 수있다.

1

그래서이 수행하는 방법을 관측이다

label -> spinner 2 -> spinner 1 

내가 당신이라면,이 설정합니다"변경 유형 ". 그래서 내 컨트롤러에서 내 관찰자에게 어떻게 통지할지 제어 할 수있었습니다.

코드를 게시하면 도움이 될 수 있습니다.

+0

아니요,'label'은'Model'을 관찰합니다. 회 전자가있는 패널은 또한 '모델'을 준수합니다. 각 스피너는 모델을 수정하는 컨트롤러에 상태 변경을 전달합니다. 이 시점에서'InputView'는'Model' 업데이트의 두 번째 웨이브를 trigers하는 종속'spinner 2'의 값을 업데이트합니다 –

관련 문제