operator01.jpg


반갑습니다. 교주jHWkRD7U-JMY1ZsyMYcpRynAc025IiHAaXuuRNuwyo0ksSkY6zxs8kzriniUO5TDBbIo0yPFIEtOjhvtWO8iXn-ZTGBVtN1g_wHgSwqyxcU4Jin3gpk 입니다.
오늘은 uitable에 대해서 알아볼까 합니다.
(본 강의는 junkon님의 질문에 대한 답변이기도 합니다.)
그럼 거두절미하고 바로 강의시작하겠습니다.

guide05gif.gif

MATLAB GUI를 다루다 보면 종종 data를 Excel 같은 형태로 표로 보여줘야할 때가 생깁니다.
data를 표형식으로 GUI에 보여주어야 할때 table을 쓰면 완전 따봉이다 이 말씀입습죠~ ^^
역시 handle의 개념, get, set 함수의 사용방법을 알고 있으면 이번 강좌의 내용인 GUI Table을 다루실때에도 어려운건 전혀 never ever 없습니다요.
(handle, get, set이 무슨 말인지 모르시겠다면 여기를 클릭합니다.)

자~ command window에서 >>guide 하셔서 blank gui 하나 만드시구요
아래와 같이 대충 table과 button을 그려주세요...

guide0501.png

gui01로 저장해주시구요 Table을 더블 클릭해서 inspector를 띄웁니다.

guide0502.png

Inspector를 잘 보시면 Table의 Column의 속성을 조정할 수 있는 항목들(ColumnEditable, ColumnFormat,.. 등등)이 죽~ 보이실 겁니다.
Column자가 붙은 항목에서 guide0504.png 요렇게 생긴 녀석을 누르시면...

guide0503.png

Table Property Editor 창이 나타납니다.
'Table Property Editor' 말 그대로 Table의 여러 속성을 손쉽게 변경할 수 있게 하는 녀석입니다. 
조작 방법이 워낙 쉬워서 몇번 해보시면 바로 감이 오실거예요 ^^
저는 Column의 이름을 X, Y로만 바꾸겠습니다요~ OK 눌러서 Table Property Editor 창 닫아주시구요.
다시 Layout Editor로 돌아와 보면 아래와 같이 Table의 Column 이름이 X,Y 로 바뀐 것을 확인 할 수 있습니다.

guide0505.png

자~ 이제 Table에 숫자를 채우는 Filling Table 버튼 code를 작성하러 갑시다요~ 
Editor 버튼(guide0506.png 요로코롬생긴 녀석)을 눌러 M-file Editor로 고고싱~
저는 간단하게 rand 함수를 사용해서 10x2 난수를 생성하여 Table을 채우겠습니다.
(여러분들이 실제 상황에서 coding 하실때는 table로 표현하시고자 하는 data를 넘겨주면 됩니다.)

guide0507.png
간단하죠? Property Name이 'Data'인것만 신경쓰시면 됩니다.
허무하게 오늘 강의 끝~ o(^o^)o ...            이 아니라 유용한 Tip 하나 더 가르쳐 드릴께요~ ㅋ

Main GUI가 있고 Sub GUI를 띄워서 작업을 해야할 경우!!
즉 두개의 GUI를 동시에 띄워서 서로 data를 주고 받는 상황일 때는 어떻게 해야할 까요?
위의 상황에서 가장 문제가 되는 것은 두 GUI간에 어떻게 data를 주고  받는가 하는 것입니다.
가장 간단한 방법은 주고 받을 data를 global 변수로 선언하는 것이지만... 씁...
그러나 좀더 nice한 방법이 있습죠 (=^ㅅ^=) 사실 global 변수를 남발하게되면 program이 커질수록 문제가 생길 가능성도 커져요~;;
우선 Sub GUI를 만듭시다. ^^

guide0508.png

gui02로 저장하시구요~
Main GUI인 gui01의 Open GUI 02 버튼에 대한 Callback 함수를 작성하겠습니다.

guide0509.png
h_gui02 = gui02 는 gui02(Sub GUI)를 여는 동시에 gui02의 handle을 h_gui02에 저장합니다.
즉 h_gui02는 gui02를 가르키는 녀석이 됩니다.
(위의 설명에서 handles는 gui에 대한 data를 담고 있는 struct형 변수이구요,
handle은 말 그대로 handle을 말합니다. handle에 대해 가물가물 하시는 분은 여기를 참조하세요)
위와 같이 code를 작성하면 handle을 사용하여 Main GUI인 gui01에서 Sub GUI인 gui02의 handles(struct형 변수) data를 
마음대로 주무를 수가 있다 이거죠~ ㅋ
(Mathworks blog 보면 guiappdata 사용을 권하고 있지만 이 방법이 훨씬 사용하기 간편합니다.)

지금 우리는 Table의 선택된 Cell의 index(위치)를 Sub GUI에 나타나게 하려고 하므로 
Table을 선택한 후 마우스 오른쪽 버튼을 클릭해서 uitable1_CellSelectionCallback 함수를 생성합시다.
(CellSelectionCallback 함수는 말 그대로 Table의 cell 선택이 바뀔 때 마다 자동으로 실행되는 Callback 함수입니다.)

guide0511.png

uitable1_CellSelectionCallback 함수를 생성후 아래와 같이 실행 code를 작성합니다.

guide0510.png
Table의 어떤 cell이 선택되었는가가 eventdata로 넘어오구요
eventdata.Indices로 참조할 수 있습니다.

마지막으로 gui01을 닫을 때 gui02도 같이 close 하게 하시려면
gui01의 inspector를 띄우신후 CloseRequestFcn에 delete(gui02) 또는 close(gui02)를 추가하시면 됩니다.
잘 되나요? 뿌잉뿌잉~ ^^


자~ 진짜로 오늘강의 끝~ =(=^ㅅ^=)=
다음 시간에 뵙겠습니다. 이만 총총...

P.S. 질문 많이 해주세요~ 
질문 중 강좌로 올릴만 한 것들은 강좌로 update하겠습니다.

profile