그런 다음 빈 템플릿 (Blang) 을 선택합니다
GUI), 확인을 클릭하여 다음 그림과 같이 가이드 디자인 인터페이스를 엽니다.
도구 모음에서 메뉴 편집기 (메뉴) 를 클릭합니다
편집기), 다음과 같이 메뉴 편집기를 엽니다.
메뉴에서 다음을 수행합니다
도구막대에 파일이라는 새 메뉴 항목을 작성합니다. 기타 설정은 다음 그림과 같습니다.
파일 메뉴 아래에 열기, 저장, 종료 등의 메뉴 항목을 추가합니다. 다음 그림을 참조하십시오.
[종료] 메뉴 항목에 구분선을 추가해야 하는 경우 [구분 기호] 를 선택합니다
위의 항목 "이면 됩니다.
내 인터페이스를 pjimage.fig 로 저장합니다
저장 후 pjimage.m 파일이 자동으로 열리고 모든 프로그램이 이 m 파일에 기록됩니다. 프로그래밍에서 마우스의 각 동작은 콜백 함수에 해당합니다. 저희 메뉴도 그렇습니다.
인터페이스에서 마우스 오른쪽 버튼을 클릭한 다음 특성을 선택합니다. \ "\" 을 (를) \ "\" \ "을 (를) \"
관리자, 속성 창을 열 수 있습니다. 다른 컨트롤을 클릭하면 해당 속성이 여기에 표시되며 수정할 수 있습니다. 가장 중요한 속성은 태그 및 문자열 속성입니다.
현재 그래픽 창의 태그 속성을 figure_pjimage 로 설정하고 창의 title (Name 속성) 을 Image Processing Instance 로 설정합니다. 다음과 같습니다.
그런 다음 도구 모음에서 저장 버튼을 클릭합니다. 그런 다음 도구 모음에서 실행 버튼 (실행) 을 클릭합니다
그림). 도구 모음의 아이콘에 실행 버튼 등의 메시지가 표시됩니다. (예: "실행" 버튼).
다음 인터페이스가 표시됩니다.
이것은 우리의 카탈로그가 저장되었다는 것을 의미한다. Fig 파일은 현재 디렉토리가 아니지만 괜찮습니다. "변경" 을 클릭하기만 하면 됩니다
현재 디렉토리를 변경하려면 "디렉토리" 를 클릭하십시오. 물론 현재 디렉터리를 MATLAB 경로에 추가하려면 "추가 대상" 을 클릭하십시오
경로' 로 하시면 됩니다. 여기서 "변경" 을 클릭하는 것이 좋습니다.
카탈로그' 는 MATLAB 경로에 추가할 필요가 별로 없기 때문입니다. 일반적으로 도구상자를 추가하거나 함수 또는 프로그램을 완료해야 합니다. MATLAB 의 명령 창에서 함수를 찾을 수 없을 때 함수 또는 프로그램이 있는 디렉토리를 MATLAB 경로에 추가할 수 있습니다.
어차피 그 버튼을 누르시면 취미로 볼 수 있어요. 두 버튼 중 어느 버튼을 클릭해도 프로그램이 제대로 실행됩니다.
우리 프로그램이 실행되면 다음과 같이 보입니다.
파일 아래의 메뉴 항목과 바로 가기를 볼 수 있지만 프로그램을 작성하지 않았기 때문에 주문한 경우에도 응답하지 않았습니다. 바로 가기를 설정하지 않으려면 메뉴에서 설정할 수 있습니다.
편집기에서 다음과 같이 Ctrl+none 을 선택하면 됩니다.
이 경우 프로젝트를 저장하는 바로 가기 키가 없습니다. 위 버튼인 "보기" 를 통해 이 메뉴 항목의 응답 기능, 즉 콜백 기능을 볼 수 있습니다. Pjimage.m 에서도 예를 들어 저장된 Tag 속성이 m_file_save 인 경우 해당 콜백 함수의 이름은 m_file_save_Callback 입니다. 이런 것들이죠.
메뉴 항목을 여는 함수를 작성해 보겠습니다. 그림을 열려면 물론 대화 상자를 열어야 합니다. 인터페이스 프로그래밍에서 대화상자를 여는 기능은 uigetfile 입니다.
Help uigetfile 명령을 사용하여 자세한 설명을 볼 수 있습니다. 다음은 메뉴를 여는 응답 함수입니다.
기능
M_file_open_Callback(hObject, eventdata, handles)
[파일 이름, 경로 이름] =
Uigetfile ( ...
{'*.bmp*.jpg*.png*.jpeg',' 이미지 파일 (*. Bmp,
*.jpg, *. Png, *. Jpeg)'; ...
*. *' 모든 파일
(*. *)'}, ...
하나를 고르다
그림');
저장하다. M 파일을 저장하고 프로그램을 실행합니다. 파일 아래의 열기를 클릭하여 다음과 같은 열기 대화상자를 엽니다.
파일을 선택하면 프로그램의 파일 이름은 선택한 파일의 파일 이름이고 pathname 은 파일이 있는 디렉토리의 경로입니다. 예: 파일 이름
=5.jpg, 경로 이름 = C:\ 문서 및 설정 \ 관리자 \ 내
문서 \.
그러면 경로를 얻은 후 어떻게 그림을 읽고 표시할 수 있을까요? 그림을 읽으면 imread 함수를 사용하여 축에 표시할 수 있습니다. 그런 다음 인터페이스에 축을 그려야 합니다. 비교를 위해, 우리는 두 개의 축을 그렸다. 하나는 가공하기 전에, 하나는 가공 후에 그렸다. 또한 가공전 축의 태그 속성은 axes_src 로 변경되고 가공후 축의 태그 속성은 axes_dst 로 변경됩니다. 변경한 후 저장합니다. 다음과 같습니다.
그런 다음 원래 m_file_open_Callback 프로그램을 기반으로 다음 프로그램을 추가합니다.
Axes (handles.axes _ src); % axes 명령을 사용하여 현재 작업의 축을 axes_src 로 설정합니다.
Fpath =[ 경로 이름
파일 이름]; % 파일 이름과 디렉토리 이름을 하나의 전체 경로로 결합합니다.
Imshow (imread (fpath)); % imread 를 사용하여 그림을 읽고 imshow 를 사용하여 axes_src 에 표시합니다.
프로그램을 실행하고 열기 메뉴 항목을 통해 그림을 엽니다. 효과는 다음과 같습니다.
그럼 어떻게 사진 한 장을 보존할까요? Imwrite 명령을 사용합니다. 그러나 imwrite 명령의 첫 번째 인수는 읽은 그림 데이터, 즉 imread 의 반환 값입니다. 이 경우 m_file_open_Callback 의 프로그램을 약간 변경해야 합니다. 마지막 문장 (imshow(imread(fpath)) 을 img _ src = imread (fpath) 라는 두 문장으로 변경합니다. Imshow (img _ src);
그리고 메뉴를 저장하는 콜백 함수에서 img_src 변수를 어떻게 얻을 수 있습니까? 여기서 img_src 는 * * * 공유 데이터로 사용됩니다. 많은 인터페이스 프로그래밍 친구들은 전역으로 선언하는 것을 좋아한다. 나는 개인적으로 더 좋은 방법이 있기 때문에 좋아하지 않는다. Setappdata 및 getappdata 함수를 사용하는 것입니다. 인터페이스에서 태그 속성이 있는 모든 공간에 응용프로그램 데이터를 추가할 수 있습니다. 물론 이 * * * 응용 프로그램 데이터를 그래픽 창에 추가하는 것을 선호합니다. 기억하기 쉽기 때문입니다. 하지만 컨트롤이 있으면 기억하기 쉽지 않습니다.
있습니다. M 파일, 각 메뉴 항목에 대한 콜백 함수 외에도 두 가지 함수가 있음을 알 수 있습니다. pjimage_OpeningFcn 과 pjimage_OutputFcn 은 인터페이스의 초기화 함수와 같고, pjimage_OpeningFcn 은 인터페이스의 출력 함수입니다. Fig 를 실행하는 대신 m 파일을 실행합니다.
따라서 pjimage _ OpeningFcn 에 다음 프로그램을 추가하여 * * * 이 img_src 행렬을 즐겨야 합니다. 코드는 다음과 같습니다.
Setappdata (handles.figure _ pjimage,' img_src', 0);
그런 다음 m_file_open_Callback 함수의 끝에 다음 프로그램을 작성합니다.
Set appdata (handles.figure _ pjimage,' img_src', img _ src);
그런 다음 다음과 같이 m_file_save_Callback 함수에서 img_src 를 추출할 수 있습니다.
Img _ src = getappdata (handles.figure _ pjimage,' img _ src');
그러면 저장할 때 당연히 저장 대화 상자가 사용됩니다. 저장 대화 상자를 사용하려면 uiputfile 함수를 사용해야 합니다. 자세한 내용은 도움말을 참조하십시오.
Uiputfile 뷰.
그런 다음 다음과 같이 메뉴 항목 (m_file_save_Callback) 아래에 프로그램을 저장합니다.
[파일 이름,
경로 이름] = uiputfile({'*. BMP',' BMP 파일'; *.JPG',' jpg 파일'},' 하나 선택
그림');
If isequal (파일 이름, 0) || isequal (경로 이름, 0)
반환; % 취소 를 클릭한 경우
기타
Fpath = 전체 파일 (경로 이름,
파일 이름); 전체 경로% ‧을 (를) 가져오는 또 다른 방법입니다.
끝
Img _ src = getappdata (handles.figure _ pjimage,' img _ src'); % ‧은 (는) 열린 그림의 데이터를 가져옵니다.
Imwrite(img_src, fpath); % 그림 저장
다음은 메뉴 항목을 종료하는 프로그램입니다. 인터페이스를 종료하고 끄기 기능을 사용하면 되지만 일반적으로 힌트가 있습니다. 예를 들어, 저장하지 않고 그림을 처리했다면 닫을 때 저장 여부를 묻는 힌트를 주어야 합니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 예술명언) 하지만 여기서는 먼저 이 일을 하지 않고 나중에 필요할 때 다시 쓰겠습니다. 따라서 여기서 메뉴 항목을 종료하는 과정은 다음과 같습니다.
닫기 (handles.figure _ pjimage);
삭제 함수 delete (handles.figure _ pjimage) 를 사용할 수도 있습니다. 너의 기분을 봐라.
하지만 프로그램을 실행할 때 그림을 열 때 "취소" 버튼을 누르면 MATLAB 의 명령 창에 오류가 나타납니다. 취소를 처리하지 않았기 때문입니다. M_file_open_Callback 아래의 프로그램을 다음 프로그램으로 변경하기만 하면 이 문제를 해결할 수 있습니다.
[파일 이름,
경로 이름] = uigetfile ( ...
{'*.bmp*.jpg*.png*.jpeg',' 이미지 파일
(*.bmp, *. Jpg, *. Png, *. Jpeg)'; ...
*. *' 모든 파일
(*. *)'}, ...
이미지 선택');
If is equal (파일 이름, 0) ||
Isequal (경로 이름, 0),
반환;
끝
Axes (handles.axes _ src);
Fpath =[ 경로 이름
파일 이름];
Img _ src = imread (fpath);
Imshow (img _ src);
Set appdata (handles.figure _ pjimage,' img_src', img _ src);
이미지 이진화 이미지 처리를 해봅시다. 위에 다음과 같이 이미지 처리 메뉴를 추가합니다.
그 아래에 다음과 같이 이미지 이진화 메뉴 항목을 추가합니다.
그런 다음 확인을 클릭하여 메뉴 편집기를 닫고 전체 인터페이스를 저장합니다. 만약 우리. M 파일, 위 그림에서 "보기" 버튼을 클릭하여 콜백 함수를 생성할 수 있습니다. 이미지 이진화에는 임계값이 있으므로 이미지 이진화에 대한 임계값을 설정하기 위해 슬라이더를 놓는 새 인터페이스를 만들 수 있습니다. 또한 텍스트는 현재 슬라이더의 값을 표시합니다. 그런 다음 새로운 빈 인터페이스를 만들고 그 위에 정적을 그려 봅시다.
텍스트 및 슬라이더 컨트롤을 선택한 다음 도구 모음 정렬 도구 (정렬
객체), 두 개의 공백까지. 다음과 같습니다.
그런 다음 이 인터페이스를 im2bw_args.fig 로 저장합니다. 전체 설계는 다음과 같습니다.
정적을 설정할 수 있습니다.
Text 의 FontSize 속성은 10 이므로 글꼴이 더 큽니다. 정적 설정
텍스트의 태그 속성은 txt_display 이고 스크롤 막대의 태그 속성은 slider_val 로 설정됩니다. 스크롤 막대를 스크롤할 수 있도록 정적으로
텍스트는 스크롤 막대 값을 표시합니다. 스크롤 막대의 콜백에 다음 프로그램을 작성해야 합니다. 스크롤 막대를 마우스 오른쪽 단추로 클릭하고 보기를 선택할 수 있습니다
콜백 아래의 콜백은 스크롤 막대의 콜백 함수 (slider_val_Callback) 로 직접 이동합니다.
Val=get(hObject,' value');
Set(handles.txt_display,' String', num2str (val));
저장, 프로그램 실행, 스크롤 막대 슬라이드 가능, 정적
텍스트에 해당 값이 표시됩니다. Figure 를 두 번 클릭하여 figure 의 속성 창 (맨 아래에 상자가 있는 창) 을 열고 Tag 속성을' figure_im2bw' 로 설정하고 Name 속성을' 이미지 이진화 임계값 설정' 으로 설정합니다. 그런 다음 인터페이스를 저장합니다. 런타임에는 다음과 같이 표시됩니다.
그런 다음 슬라이더가 미끄러지면 pjimage 의 axes_dst 축에 이진 이미지. fig 가 표시됩니다. 그러면 어떻게 해야 할까요? 먼저 PJI 이미지에서 "이미지 처리" 아래의 "이미지 이진화" 를 클릭하면 FIG 메뉴, im2bw_args.fig 가 열립니다. Im2bw_args.m 을 호출할 때입니다. 호출할 때 열린 im2bw_args.fig 를 가리키는 핸들을 반환합니다. 자세한 내용은 im2bw_args.m 파일 앞의 주석을 참조하십시오.
%
H = IM2BW_ARGS 는 핸들을 새 IM2BW_ARGS 또는 핸들 ~ 로 반환합니다
% the
기존
단례 *.
즉, 위 그림에서 im2bw_args.fig 를 열 수 있습니다. 따라서 이미지 이진화 (m_image_2bw_Callback) 의 콜백 함수 아래에 다음 프로그램을 작성합니다.
H = im2bw _ args
그런 다음 pjimage.fig 를 저장하고 im2bw_args.fig 와 pjimage.fig 를 한 디렉토리에 저장하는 것이 좋습니다. 그런 다음 pjimage.fig 를 실행하여 이미지 이진화를 클릭하면 im2bw_args.fig 가 열리고 슬라이더를 슬라이딩할 때 응답 값이 표시되는 것을 확인할 수 있습니다.
먼저 슬라이더를 슬라이딩할 때 pjimage 의 axes_dst 축에 슬라이딩 이진 이미지를 표시하는 방법을 설명합니다.
먼저 findobj 함수를 통해 pjimage 의 figure 핸들을 얻은 다음 guihandles 를 사용하여 반환 값을 핸들로 변환할 수 있습니다. 그런 다음 이 변환된 핸들을 사용하여 pjimage.fig 의 모든 컨트롤을 참조할 수 있으므로 im2bw_args.fig 아래의 slider 에 대한 콜백 함수에 다음 함수를 추가했습니다.
H _ pjimage = getappdata (handles.figure _ im2bw,' h _ pjimage');
Axes (h _ pjimage.axes _ dst);
Img _ src = getappdata (h _ pjimage.figure _ pjimage,' img _ src');
Bw=im2bw(img_src, val);
Im show (bw);
그런 다음 im2bw_args_OpeningFcn 에 다음을 추가합니다.
H_pjimage=findobj('Tag',' figure _ pjimage');
H _ pjimage = guihandles (h _ pjimage);
Set appdata (handles.figure _ im2bw,' h_pjimage', h _ pj image);
그런 다음 저장하고 실행합니다. 효과는 다음과 같습니다.
하지만 사진을 열지 않고 "이미지 이진화" 를 클릭하면 어떻게 될까요? 표시된 이미지가 완전히 검고 전혀 의미가 없다는 것을 알 수 있습니다. 따라서 "열기" 메뉴 항목을 클릭하지 않으면 "이미지 처리" 메뉴를 사용할 수 없게 만들 수 있습니다.
그런 다음 pjimage.m 의 OpeningFcn 에 다음 프로그램을 추가합니다.
세트 (handles.m _ image,' Enable',' off');
Open 메뉴 항목의 콜백 함수 끝에 다음 프로그램을 추가합니다.
세트 (handles.m _ image,' Enable',' on');
이 경우 [열기] 를 클릭하지 않으면 [이미지 처리] 메뉴의 명령을 사용할 수 없습니다. 효과는 다음과 같습니다.
"열기" 를 클릭하면 사용할 수 있습니다.
다음으로 앞의 질문은 사진을 저장할지 묻는 것이다. 먼저 두 개의 플래그를 설정해야 합니다. 하나는 그림이 처리되었는지, 다른 하나는 그림이 저장되었는지 여부입니다. 그런 다음 pjimage_OpeningFcn 에 다음 두 개의 응용 프로그램 데이터를 추가합니다.
Set appdata (handles.figure _ pjimage,' bSave', false);
Set appdata (handles.figure _ pjimage,' bChanged', false);
그런 다음 [이미지 이진화] 메뉴 항목의 콜백 함수에서 bChanged 값을 true 로 변경하여 다음 프로그램을 추가합니다.
Set appdata (handles.figure _ pjimage,' bChanged', true);
Axis axes_dst 에 이미지를 저장하려고 하는데 파일 아래의 저장은 기본적으로 axis axes_src 에 이미지를 저장하는 것이기 때문에 어떻게 해야 할까요? 다른 저장 메뉴 항목을 추가해야 합니다. 이번에는 axis axes_dst 에 마우스 오른쪽 버튼 클릭 메뉴를 추가했습니다.
도구 모음에서 메뉴 편집기를 열고 컨텍스트를 선택합니다.
메뉴 (컨텍스트 메뉴) 는 다음과 같습니다.
그런 다음 새 컨텍스트를 작성합니다.
다음과 같이 태그 속성이 axes_dst_menu 인 메뉴:
그런 다음 위 그림과 같이 Tag 속성이 axes _ dst _ menu _ Save 인 save 메뉴 항목을 추가합니다. 그런 다음 axis axes_dst 를 마우스 오른쪽 버튼으로 클릭하고 properties 를 선택합니다
검사원. 축의 UIContextMenu 등록 정보를 axes_dst_menu 로 변경합니다.
다음 그림과 같이 나타납니다.
그런 다음 저장하고 실행합니다. Axes_dst 를 마우스 오른쪽 버튼으로 클릭하면 저장 메뉴가 표시됩니다. 그것의 기능을 쓰자.
[파일 이름, 경로 이름] =
Uiputfile({'*. BMP',' BMP 파일'; *.JPG',' jpg 파일'},' 이미지 선택');
만약
Isequal (파일 이름, 0) || isequal (경로 이름, 0)
반환;
기타
Fpath = 전체 파일 (경로 이름,
파일 이름);
끝
Img _ dst = getimage (handles.axes _ dst);
Imwrite(img_dst, fpath);
Set appdata (handles.figure _ pjimage,' bSave', true);
하지만 그림을 보기 전에 axes_dst 를 마우스 오른쪽 단추로 클릭하면 메뉴가 있다는 것을 알 수 있습니다. 이진화되면 다시 마우스 오른쪽 버튼을 클릭하면 메뉴가 없습니다.
그러나 figure 창의 UIContextMenu 에 마우스 오른쪽 버튼 클릭 메뉴 axes_dst_menu (여기에 컨트롤이 없고 figure 의 속성 창을 두 번 클릭하여 열 수 있음) 를 추가하면 위 문제가 발생하지 않으며 모든 것이 제대로 작동합니다. Axes_dst 에 추가할 때 축의 내용이 변경되면 마우스 오른쪽 버튼 클릭 메뉴가 상위 오브젝트에 연결되기 때문입니다. 따라서 축에 마우스 오른쪽 버튼 클릭 메뉴를 표시해야 하는 경우 프로그램에서 생성됩니다. 만드는 법, 먼저 말하지 마라. 먼저 axis axes_dst 를 저장하고 프로그램을 종료할 때 어떻게 해야 하는지 말해 주세요.
원래 m_file_exit_Callback 을 다음 절차로 변경합니다.
Bchanged = getappdata (handles.figure _ pjimage,' bchanged'); % 거스름돈?
Bsave = getappdata (handles.figure _ pjimage,' bsave'); % 저장 가져오기 ?
만약
Bchanged = = true & amp & ampbsave = = false,% 가 변경되었지만 저장되지 않았습니다.
BtnName=questdlg ('그림을 변경했지만 저장하지 않았습니다. 저장하시겠습니까? ,' 프롬프트',' 저장',' 저장하지 않음',' 저장'); % 질문 대화 상자 사용
Btn 전환 name,
사례' 저장',% 은 (는) axes_dst_menu_save_Callback 의 기능을 수행합니다.
Feval (@ axes _ dst _ menu _ save _ callback, handles.axes_dst_menu_save, eventdata
사례' 저장하지 않음',% 아무것도 하지 않는다.
끝
끝
H=findobj('Tag',' figure _ im2bw'); % 이미지 이진화 매개 변수를 설정하는 창을 열지 여부를 결정합니다.
만약
~isempty(h),% 찾은 경우 닫습니다.
닫기 (h);
끝
닫기 (findobj ('tag',' figure _ pjimage'); % ‧주 창을 닫습니다
프로그램에 도구 모음을 추가해 보겠습니다. 도구 모음에서 도구 모음을 클릭합니다.
편집기, 다음을 엽니다.
미리 정의 를 선택합니다
"도구" 아래에서 열고 "추가" 를 클릭합니다. Save 를 다시 선택하고 add 를 클릭합니다. 열기 버튼의 레이블 속성을 다음과 같이 TBL _ open 으로 변경하고 저장 버튼의 레이블 속성을 TBL _ open, save 로 변경합니다.
"보기" 를 클릭하여 버튼을 여는 콜백을 찾고 그 아래 호출 메뉴에서 메뉴 항목의 콜백을 열려면 버튼을 여는 콜백 아래에 다음 프로그램을 작성해야 합니다.
Feval(@m_file_open_Callback, handles.m_file_open, eventdata, handles);
마찬가지로 저장 버튼의 콜백을 찾아 그 아래에 저장 프로그램을 작성하지만, 첫 번째 저장인지, 그렇다면 저장 대화 상자를 사용해야 합니다. 그렇지 않다면 첫 번째 저장된 경로에 직접 저장할 수 있습니다. 그런 다음 몇 가지 응용 프로그램 데이터를 설정해야합니다. 첫 번째는 기록이 처음 저장되었는지, 두 번째는 처음 저장된 경로를 기록하는 것입니다. 이 경우 pjimage_OpeningFcn 에 다음 코드를 추가합니다.
Set appdata (handles.figure _ pjimage,' fstSave', true);
Setappdata (handles.figure _ pjimage,' fstPath', 0);
그런 다음 저장 버튼 콜백에서 다음 프로그램을 작성하십시오.
Fst save = getappdata (handles.figure _ pjimage,' FST save');
If(fstSave==true)
[파일 이름, 경로 이름] = uiputfile({'*. BMP',' BMP 파일'; *.jpg',' jpg 파일'},
이미지 선택');
If is equal (파일 이름, 0) ||
Isequal (경로 이름, 0)
반환;
기타
Fpath=fullfile (경로 이름, 파일 이름);
끝
Img _ dst = getimage (handles.axes _ dst);
Imwrite(img_dst, fpath);
Set appdata (handles.figure _ pjimage,' fstPath', fpath);
Set appdata (handles.figure _ pjimage,' bSave', true);
Set appdata (handles.figure _ pjimage,' fstSave', false);
기타
Img _ dst = getimage (handles.axes _ dst);
Fpath = getappdata (handles.figure _ pjimage,' fstpath');
Imwrite(img_dst, fpath);
끝
또한 파일 아래의 "저장" 버튼과 도구 모음의 "저장" 버튼이 필요합니다. 그림을 열 때까지 사용할 수 없습니다. 파일 아래의 "열기" 또는 도구 모음 아래의 "열기" 를 클릭하는 경우에만 사용할 수 있습니다. 그런 다음 pjimage_OpeningFcn 에 다음 코드를 추가해야 합니다.
Set(handles.tbl_save,' Enable',' off');
세트 (handles.m _ file _ save,' Enable',' off');
M_file_open_Callback 아래에 다음 코드를 추가합니다.
Set(handles.tbl_save,' Enable',' on');
세트 (handles.m _ file _ save,' Enable',' on');
이렇게 작은 절차가 끝났다.
위의 단계에 따라 이 애플릿을 완성할 수 있다면, 인터페이스 프로그래밍의 문제를 파악하게 될 것이다. (존 F. 케네디, 인터페이스명언)