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