Matlab GUI:覆盖空格键的行为

时间:2014-10-23 09:20:15

标签: matlab user-interface keyboard-events

我使用GUIDE在matlab中构建了一个GUI,并使用我的图中的WindowKeyPressFcn回调函数为某些操作添加了键盘快捷键。我的问题是我想使用空格键作为快捷键之一,但它已经有一个预设用法:它激活当前选择的控件(即与点击所选按钮相同)。

虽然我可以通过回调触发空格键上的预期操作,但我发现无法删除这些额外的不需要的功能。结果是执行了两个动作 - 我编程的动作和非预期的按钮按下,这会造成混乱。底线是我不能使用空格键作为快捷方式。有没有办法关闭此功能或以某种方式绕过它?也许某些事情会阻止按键在我的回调处理之后到达GUI?

我更喜欢采用Matlab记录的方式,但如果不可能,也欢迎使用Java黑客。

1 个答案:

答案 0 :(得分:0)

AFAIK不受欢迎的行为与Matlab相关的操作系统更多,我知道无法移除它,但是你可以解决它。

执行此操作的一种方法是检查按钮回调中按下的最后一个键是什么,通过向按钮添加KeyPressFcn来执行此操作。我在下面创建了一个简单的例子:

function spacebarTest
  % create a figure
  hFig = figure ( 'KeyPressFcn', @KeyPress );
  % create a uicontrol
  uicontrol ( 'style', 'pushbutton', 'Callback', @PushButton, 'KeyPressFcn', @KeyPress );
  % store the last key pressed information in the fiure handle
  userData.lastKey = '';
  set ( hFig, 'userData', userData );
end
function KeyPress ( obj, event )
  % obtain the handle for the figure
  hFig = ancestor ( obj, 'figure' );
  % extract the user data 
  userData = get ( hFig, 'userData' );
  % store the last key in the user data
  userData.lastKey = event.Key;
  % update the figure handle user data
  set ( hFig, 'userData', userData );
  disp ( 'spacebar shortcut' );
end
function PushButton ( obj, event )
  % get the figure handle 
  hFig = ancestor ( obj, 'figure' );
  % extract the user data
  userData = get ( hFig, 'userData' );
  % check if spacebar was the last key pressed
  if strcmp ( userData.lastKey, 'space' ); return; end
  disp ( 'running callback - push me' );
end

这样做的一个问题是它仍然“看起来”像你的按钮被按下了,虽然回调没有运行。要解决此问题,您需要停止按钮获得焦点,您需要用JButton(java)替换您的uicontrol按钮并使用FocusGainedCallback