퇴근5분전

 

JSFW.Mockup 프로그램을 사용하다가 예외가 뜨길래 디버깅을 해봤다.

 

전달되어야 할 대리자가 null 이었다. 왜지?

 

처음엔 if문으로 null체크하고 넘어갔는데, 왠지 모를 찝찝함으로 계속 테스트를 하면서 왜 null 이 되는지 찾았다.

 

 

mockup의 속성에서 Editor를 띄워서 컬럼목록으로 컨트롤을 생성하는 창을 띄웠다.

그리고 이 창에서 컨트롤을 생성하여 드래그 앤 드랍으로 원하는 위치에 떨어뜨린다.

 

그리고 떨어뜨린 컨트롤을 선택했을때

 1. 속성창에 해당 컨트롤의 속성들을 보여준다.

 2. 선택된 컨트롤을 지정해둔다.

   - delete 키를 눌렀을때 해당 컨트롤 삭제 처리해야 하기때문에...

 

 

근데 여기서 문제가... 창에서 생성된 컨트롤에 이벤트를 부여할때

 

판넬.대리자를 넘겨준다. => 기본Editor 객체 => 생성창 => 생성된 컨트롤.대리자 = 넘어온.대리자;

 

여기서 배치가 끝나고 생성창을 닫으면!  실제 컨트롤.대리자 에 할당되어 있던 넘어온.대리자(판넬.대리자)가 null값이 되었다.

 

그래서 선택된 컨트롤로 지정이 안되어 삭제가 안되고 이전에 이벤트를 제대로 탄 객체가 선택되어진채 있다가 delete 누르면 그게 날아간다.

 

이걸 기본Editor에서 컨트롤을 생성하여 드래그 앤 드랍 처리를 하고 이벤트도 여기서 붙인다.

그리고 이 메서드를 대리자를 통해서 생성창에 넘기고, 생성된 컨트롤.대리자에 또 넘겨준다.

실제 컨트롤을 드래그를 시작하면 원래 Editor개체에서 생성을 하여 직접 전달하게 된다.

 

창이 닫혀도 이벤트는 계속 유지되기 때문에... 정상동작되는 것을 확인하였다.

 

글로 쓰니 ...alskdjflasjdflaj