在GUI 的设计中,数据的直接输入有两种方式:edit 和 slider,他们之间经常需要同步,即表示同一个变量的 string值或者value值,当edit改变时,slider 跟着改变;同样当slider改变时,edit 也随着改变,并实时显示在 table 中。
1、根据GUIDE 建立GUI。打开GUI,在空白区域放置三个 uicontrol :slider、edit、table,如图所示。为了编辑的方便,把他们放在一个 panel 上。
三个控件的tag 分别是:slider1、edit1、UItable1;其中slider 的 属性中,Max:100,Min:-100;edit 的 string 值设为:num;
table 的data 中,设置 行、列的显示名。
2、编辑 M 文件。打开对应的M文件,可以看到系统自动生成了四个函数框架:slider1_Callback、slider1_CreateFcn、edit1_Callback、edit1_CreateFcn ,在 slider1_Callback 中添加代码
global a;
set(handles.edit1,'string',num2str(get(hObject,'value')));
a=str2num(get(handles.edit1,'string'));
set(handles.uitable1,'data',[a,2*a]);
在edit1_Callback中添加代码:
global a;
set(handles.slider1,'value',str2num(get(hObject,'string')));
a=str2num(get(handles.edit1,'string'));
set(handles.uitable1,'data',[a,2*a]);
利用函数 get 来取得句柄中的数据值,利用 set 俩改变句柄中数据的值,并利用global 在不同的控件中共享数据。
完整的回调函数如下:
function slider1_Callback(hObject, eventdata, handles)
global a;
set(handles.edit1,'string',num2str(get(hObject,'value')));
a=str2num(get(handles.edit1,'string'));
set(handles.uitable1,'data',[a,2*a]);
function slider1_CreateFcn(hObject, eventdata, handles)
% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
function edit1_Callback(hObject, eventdata, handles)
global a;
set(handles.slider1,'value',str2num(get(hObject,'string')));
a=str2num(get(handles.edit1,'string'));
set(handles.uitable1,'data',[a,2*a]);
function edit1_CreateFcn(hObject, eventdata, handles)
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
程序运行的结果如下: