【问题标题】:Make MATLAB slider NOT slide when arrow keys are pressed按下箭头键时使 MATLAB 滑块不滑动
【发布时间】:2013-10-30 01:12:27
【问题描述】:

我认为这可能是一个简单的问题。

基本上,我有一个在 MATLAB 中实现的(连续)滑块。如果我单击滑块并滑动选项卡,我会得到我想要的,等等。这很好。

现在,上/下/左/右箭头键也可以使滑块滑动。但是,我不想让滑块移动,但我想将它们用于其他用途。那么,如何在按下箭头键时阻止滑块移动滑动选项卡,以便我可以将它们用于其他用途?

谢谢。

【问题讨论】:

  • 我想您可以通过eventdata 到eventdata.Key 看到按下了什么键。如果它是向上、向下、向左或向右键,那么您应该能够发出返回以防止滑块执行任何操作。
  • @jucestain 实际上我确实有一个 eventData 的侦听器,是的。事实上,无论按下什么按钮,它都会显示“左”、“右”等,但滑块拇指也会移动。你是什​​么意思'发出退货'以防止滑块做任何事情?非常感谢。
  • 嗯...我指的是滑块回调函数。返回将阻止滑块回调触发,但箭头键可能仍会移动滑块。我尝试覆盖 KeyPressFcn 回调,但仍然不起作用,所以我不确定你能做什么。
  • 这很奇怪,我已经覆盖了图形的所有按键回调以及滑块 uicontrol,我似乎无法阻止滑块在箭头键上移动。很奇怪。我使用的是旧版本的 matlab,所以它可能是一个已修复的错误。祝你好运。
  • @jucestain 你用的是什么版本?现在看来,user2816823 的答案是城里最好的游戏,虽然它有点 hacky。

标签: matlab user-interface slider


【解决方案1】:

这样做是因为当您单击滑块时,滑块会获得焦点。

在您的滑块回调中,在调用的最后:

set(hObject, 'Enable', 'off');
drawnow;
set(hObject, 'Enable', 'on');

这将迫使滑块失去焦点。这是一个非常黑客,但应该可以工作。

【讨论】:

  • 嗯,谢谢,这似乎确实有效......现在......像你一样,我担心它以后可能会给我带来问题,因为它很hacky......也许还有另一种方法也一样?
【解决方案2】:

另一种不调用(慢)drawow 函数的解决方案,因为滑块回调似乎是在焦点时按下一个键连续调用,是使用java 并请求焦点到滑块回调中的不同组件。像这样的东西(我将注意力转移到一个无害的 uipanel 上): jhUipanel = findjobj(hUipanel); jhUipanel.requestFocus;

【讨论】:

    【解决方案3】:

    这里有一个很好的答案:

    https://www.mathworks.com/matlabcentral/answers/33224-gui-figure-focus

    jPeer = get(handle(gcf), 'JavaFrame');
    jPeer.getAxisComponent.requestFocus;
    

    如果你下载了 Yair 的 findjobj 函数,Guest36 的答案可能也有效,但我没有尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-13
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多