uicontrol 上的 ButtonDownFcn
ButtonDownFcn on uicontrol
我的 GUI 有两个编辑框 (uicontrol),我想通过左键单击它来更改它们的背景颜色。对于鼠标左键单击,ButtonDownFcn 仅在 uicontrol Enable 属性 设置为 'inactive' 或 'off' 时起作用,因此我切换 属性 使其起作用。
通过按tab 键,我希望我的编辑框将它们的背景色重新初始化为白色,并更改下一个编辑框的背景色。问题是按tab键,焦点不会改变,因为uicontrol Enable 属性是'off'或'inactive'。
有解决办法吗?
到目前为止,这是我的代码。 (edit1 和 edit2 的代码相同)
function edit1_ButtonDownFcn(hObject, eventdata, handles)
set(hObject, 'Enable', 'on', 'BackgroundColor', [0.5,1,0.7]) % change enable and background color properties
uicontrol(hObject) % focus on the current object
function edit1_Callback(hObject, eventdata, handles)
set(hObject, 'Enable', 'inactive', 'BackgroundColor', [1 1 1]) % reinitialize the edit box
您可以使用 uicontrol 的一个未记录的功能来设置获得鼠标焦点时的适当操作。
这是通过查找底层 java 对象并设置适当的回调来完成的。
使用 "findjobj" function which you can download from the Mathworks FEX
找到 java 对象
function test
%% Create the figure and uicontols
hFig = figure;
uic(1) = uicontrol ( 'style', 'edit', 'position', [100 300 200 50], 'parent', hFig );
uic(2) = uicontrol ( 'style', 'edit', 'position', [100 200 200 50], 'parent', hFig );
% for each of the uicontrols find the java object and set the FocusGainedCallback
for ii=1:2
jObj = findjobj ( uic(ii) );
set(jObj,'FocusGainedCallback', @(a,b)gainFocus( hFig, uic, ii ));
end
% set the defaults.
gainFocus( hFig, uic, 1 );
end
function gainFocus( hFig, uic, uicIndex )
switch uicIndex
case 1
index = [1 2];
case 2
index = [2 1];
end
uic(index(1)).BackgroundColor = [1 1. 1];
uic(index(2)).BackgroundColor = [0.5 1. 0.7];
end
我的 GUI 有两个编辑框 (uicontrol),我想通过左键单击它来更改它们的背景颜色。对于鼠标左键单击,ButtonDownFcn 仅在 uicontrol Enable 属性 设置为 'inactive' 或 'off' 时起作用,因此我切换 属性 使其起作用。
通过按tab 键,我希望我的编辑框将它们的背景色重新初始化为白色,并更改下一个编辑框的背景色。问题是按tab键,焦点不会改变,因为uicontrol Enable 属性是'off'或'inactive'。 有解决办法吗?
到目前为止,这是我的代码。 (edit1 和 edit2 的代码相同)
function edit1_ButtonDownFcn(hObject, eventdata, handles)
set(hObject, 'Enable', 'on', 'BackgroundColor', [0.5,1,0.7]) % change enable and background color properties
uicontrol(hObject) % focus on the current object
function edit1_Callback(hObject, eventdata, handles)
set(hObject, 'Enable', 'inactive', 'BackgroundColor', [1 1 1]) % reinitialize the edit box
您可以使用 uicontrol 的一个未记录的功能来设置获得鼠标焦点时的适当操作。
这是通过查找底层 java 对象并设置适当的回调来完成的。
使用 "findjobj" function which you can download from the Mathworks FEX
找到 java 对象function test
%% Create the figure and uicontols
hFig = figure;
uic(1) = uicontrol ( 'style', 'edit', 'position', [100 300 200 50], 'parent', hFig );
uic(2) = uicontrol ( 'style', 'edit', 'position', [100 200 200 50], 'parent', hFig );
% for each of the uicontrols find the java object and set the FocusGainedCallback
for ii=1:2
jObj = findjobj ( uic(ii) );
set(jObj,'FocusGainedCallback', @(a,b)gainFocus( hFig, uic, ii ));
end
% set the defaults.
gainFocus( hFig, uic, 1 );
end
function gainFocus( hFig, uic, uicIndex )
switch uicIndex
case 1
index = [1 2];
case 2
index = [2 1];
end
uic(index(1)).BackgroundColor = [1 1. 1];
uic(index(2)).BackgroundColor = [0.5 1. 0.7];
end