Как можно записывать ввод клавиатуры внутри uipanel, то есть когда что-либо в панели фокусируется? Я нашел, что uipanel
не имеет KeyPressFcn
собственности. Я прочитал this post из недокументированной Matlab о Java-обратных вызовах, но я также не могу получить KeyPressedCallback
для работы. Например, если я пытаюсь это:Как захватить нажатие клавиши в Matlab uipanel
set(h_panel, 'KeyPressFcn', @(src, event)key_press(obj, src, event));
Я получаю эту ошибку:
The name 'KeyPressFcn' is not an accessible property for an instance of class 'uicontrol'.
То же самое происходит, если я пытаюсь KeyPressedCallback
. Боюсь, мне придётся прибегнуть к какой-то взлому с участием родительской фигуры, которую я бы хотел избежать, если это было возможно.
Может ли панель быть «активной» в том смысле, что она выбрана и может получать нажатия клавиш? Очевидно, есть кнопка (мышь), но ничего для клавиш ... – chappjc
@chappjc прав, панель не активна в том смысле, что другие uicontrols есть. Вы можете попытаться перехватить событие нажатия клавиши на ** цифре ** 'KeyPressFcn', а затем проверить, была ли ваша мышь выше uipanel в то время (или если элемент управления, который имеет фокус, является« дочерним »вашего uipanel). Если да, делайте свое дело. если нет, отбросьте событие нажатия клавиши или передайте его другим слушателям. – Hoki
Ну, я хотел избежать использования обратных вызовов родительских фигур, но я думаю, что альтернативой является, возможно, установка обратных вызовов для каждого 'uicontrol' внутри' uipanel'. Но у осей и ретейлов действительно нет «KeyPressFcn» !? – patrickvacek