2016-10-26 4 views
1

Ich arbeite bei GUI in MATLAB-Anwendung. Ich benutze uitable Objekt. Dann finde ich interessant undocumented feature, wie es die Daten zu sortieren, wählen Sie ganze Reihe usw.Funktion Handle mit `set` Funktion MATLAB

ich tun, um diese Art und Weise:

% create jhandle to my uitable object 
juiTable = findjobj(handles.uitable1,'class','UIScrollPane'); 
jtable = juiTable(1).getComponent(0).getComponent(0); 
%... some my action like this: 
jtable.setRowSelectionAllowed(true); 
%... 

%and now lets try use callback for selected cell in uitable: 
juiFunHandle = handle(jtable, 'CallbackProperties'); 

set(juiFunHandle, 'MousePressedCallback', @CellSelectionCallback); 
set(juiFunHandle, 'KeyPressedCallback', @CellSelectionCallback); 

, die perfekt funktioniert.

Jetzt Frage: wie man mehrere Parameter zu CellSelectionCallback setzt? Ich möchte diese Funktion macht etwas Aktion (macht einige Taste aktiv etc). Dazu versuche ich GUI handles dazu zu setzen. Aber wie?

Meine CellSelectionCallback Funktion:

function CellSelectionCallback(juiTable, varargin) 
% get it from the example 
row = get(juiTable,'SelectedRow')+1; 
fprintf('row #%d selected\n', row); 

P. S. Ich sehe varargin hinein. Kann ich also mehrere Argumente verwenden? Wie stelle ich es mit meiner set Funktion?

Antwort

1

Standardmäßig übergeben MATLAB-Callbacks zwei Eingabeargumente (das Objekt, das den Rückruf generiert hat, und einige Ereignisdaten). Wenn Sie Ihrem Callback mehr (oder weniger) Argumente übergeben möchten, können Sie diese beiden Eingaben mit einer anonymen Funktion akzeptieren und dann Ihren Callback mit den gewünschten Eingaben aufrufen.

In Ihrem Fall könnten Sie Ihre anonyme Funktion so schreiben, dass Sie das handles Objekt als zusätzliche Eingabe in Ihrer Callback-Funktion übergeben

set(juiFunHandle, 'MousePressedCallback', ... 
    @(src, evnt)CellSelectionCallback(src, evnt, handles)); 

Dann würde Ihr Rückruf in etwa so aussehen:

function CellSelectionCallback(jtable, evntdata, handles) 
+0

Ah natürlich! Benutze es einfach wie eine normale anonyme Funktion! Übrigens kann ich 'function CellSelectionCallback (juiTable, varargin)' und dann 'varargin {2}' verwenden. –

+0

@Mikhail_Sam Sicher kannst du das auch, ich bevorzuge nur explizite Eingaben statt 'varargin', also habe ich das als alternativen Ansatz gezeigt. – Suever