2016-03-14 3 views
0

Для добавления Java компонента в Matlab GUI я использую недокументированные функции javacomponent:Как добавить java-слушателей в компонент java в Matlab?

[handles.myWidget, handles.hMyWidget] = javacomponent('com.mycompany.MyClass', [90,10,460,400], gcf); 

Одновременно добавить слушатель событий обратного вызова, мне нужно вызвать добавления слушателя:

handles.myWidgetListeners = addlistener(myhandle, 'MouseClickedCallback', @mouseClicked_Callback); 

Ни ручки, возвращаемый javacomponent припадков до addlistener, поэтому мне нужно создать еще одну ручку с:

myhandle = handle(handles.myWidget, 'CallbackProperties'); 

Итак, это правда, что мне нужно держать FOUR ручками для ОДИН компонент, чтобы полностью с ним работать?

Невозможно укоротить этот код?

ответ

0

Несмотря на то, что все описанные вами шаги являются обязательными для назначения обратного вызова MATLAB для событий Java swing, созданных с помощью javacomponents, вам необязательно хранить все созданные четыре создаваемых дескриптора.

[jwidget, hwidget] = javacomponent('myclass', [0 0 100 100], gcf); 
hwidget = handle(hwidget, 'CallbackProperties'); 

Вам не нужно поддерживать какhwidget и результат handle(hwidget, 'CallbackProperties') как они функционально эквивалентны.

Другой вариант заключается в том, чтобы просто не использовать javacomponent при создании объекта Java, а затем получить от него дескриптор «CallbackProperties».

jwidget = com.mycompany.myclass(); 
hwidget = handle(jwidget, 'CallbackProperties'); 

Кроме того, насколько слушатель идет, вы не обязательно должны явно хранить это в качестве переменной и отслеживать его вокруг графического интерфейса пользователя. Вместо этого вы можете просто сохранить его внутри самого виджета, а затем, если вам когда-нибудь понадобится отключить его, вы можете получить его таким же образом.

listener = addlistener(hwdiget, 'MouseClickedCallback', @mouseclick); 
set(hwidget, 'UserData', listener); 
Смежные вопросы