Menu

GUI - multi pathway 출력 문제.

2008-08-01
2013-04-10
  • Myungha Jang

    Myungha Jang - 2008-08-01

    현재 multi pathway 를 출력하는 부분에서 지영이랑 제가 고민하고 있는 부분은 다음과 같습니다.

    지난 번 세미나 때 말씀드렸던 문제를 다시 말씀드리면

    보통은 JList 같은 컴포넌트에 listener가 하나가 부착되어, 리스트에 있는 체크박스의 상태가 바뀌면

    리스너가 작동하여 처리를 해주는 방식인데, 지금의 트리는 하나하나의 체크박스가 리스트라는 하나의 컴포넌트로 묶여 있는 것이 아니라

    각각의 체크박스가 다 JCheckBox라는 각각의 컴포넌트이므로 itemListener가 각각의 체크박스에 모두 부착되게 하는 방식입니다.

    n개의 컴포넌트가 하나씩 리스너를 갖고 있으면 한개의 이벤트에 대해서 같은 동작이 n번 작동하는 것이라

    (실은 체크박스 하나에 identifier가 없어서, 체크/체크해제라는 이벤트가 발생할때마다 무조건 체크박스에 리스너를 부착하여

    같은 체크박스에 체크/체크해제를 반복하면 그 횟수만큼 리스너를 부착하여 그나마도 n개 이상입니다만..)

    한 4,5번째만 가도 리스너가 동시에 4-5개가 작동하여 한개의 그래프를 로딩하는데에도 4-5번을 해서 메모리부족으로 실행이 종료되는

    것이 문제였습니다. 체크박스 트리의 리스너 구현의 구조를 바꾸긴 힘들 것 같고, 차선책으로 생각한 것이

    클릭할 때마다 그래프를 로딩하는 이벤트가 아닌, 체크된 체크박스의 고유 identifier 숫자 번호에 해당하는 배열의 위치에

    체크가 되었다는 것을 표시하여 draw 버튼을 눌렀을때 actionListener로 한꺼번에 그 작업을 처리하는 것이었습니다.

    (이 identifier 방식은 서브 패스웨이를 0번부터 차례대로 번호를 매긴 것으로, 기존의 코드에서 multi pathway 를 출력할 때

    이 선택된 pathway의 번호를 ischeck 라는 배열에 체크하여, 체크된 번호의 패스웨이의 경로를 찾아 넘겨주는 식으로 되어있는

    논리를 따른 것입니다.) 물론 여전히 여러개의 리스너가 한꺼번에 동작하여 쓸데없이 메모리를 낭비한다는 점은 있지만,

    그래프를 로딩하는 작업에 비해 배열에 ischeck[selectedItem.getIdentifier()] = true 의 작업은 훨씬 간단한 것이므로

    괜찮을 것이라고 생각하여 이렇게 바꾸어보려고 시도한것이었습니다.

    또 다른 방법으로는, 세미나 때 교수님께서 말씀하신대로 아예 트리에서는 itemListener를 사용하지 않고, draw버튼의 actionListener

    에서 체크박스가 체크되었는지(isSelected) 되었는지 검사하여 이벤트 처리를 하는 방식을 고려해보았습니다.

    그런데 문제는, 그렇게 되면 각각의 체크박스가 연결고리가 없기 때문에 반복문을 돌릴 수 없고, 존재하는 서브 패스웨이의 개수만큼

    if문을 사용하여 isSelected되었는지 확인을 해보아야 한다는 것입니다.

    (사실 각 트리 노드 체크박스(CheckBoxNode) 객체가 이름을 가진 것도 아니고, 무작정 만들어지면서 트리에 add 된 방식이라

    접근 방법도 생각해봐야 합니다. 트리에 add하면서 다른 배열에 reference를 넣어 저장하는 방식이 되나 시도해보려고 합니다.)

    아무래도 깔끔한 방법이 아니긴 한데, 일단은 이 방법이 최선인 것 같아 이대로 수정을 해보려고 하는데..

    혹시 mutli pathway 이벤트 처리 방법에 대해서 더 좋은 의견이 있으시면 리플로 달아주세요^^

     
    • Hyun S. Park

      Hyun S. Park - 2008-08-02

      방법은 매우 여러가지가 있을 듯 한데... 코드를 한번 보고, 월요일이나 화요일쯤 토의를 한번 하자.

      KEGG의 XML 파일을 파싱하면서, 각 패스웨이에 인덱스를 붙여주면, 반복문 같은 것을 쉽게 돌릴 수 있을 것 같기는 한데...

      아, 그리고, 여기는 Open Discussion인데...

      다음 부터는 Developers Discussion에 올리는 것이 좋을 듯...

       

Log in to post a comment.