我遇到了一个来自java的matlab waitbar的有趣替代品,如下所示。
jBarHandle = javax.swing.JProgressBar(0, 103);
jBarHandle.setStringPainted(true);
jBarHandle.setIndeterminate(false);
posPanel = getpixelposition(handles.slider1,true);
javacomponent(jBarHandle,posPanel,handles.fig);
jBarHandle.setValue(fix(0));
在GUIDE的输出函数下调用上面的代码将使用java启用滑块更新滑块。但是如何将variable_data传递给setValue?
是谁试过这个?或者有任何想法?请帮忙。答案 0 :(得分:4)
您可以将变量直接传递给setValue
对象的JProgressBar
方法。这里我使用javaMethodEDT
来确保从事件调度线程(EDT)调用该方法。您也可以直接致电jBarHandle.setValue(k)
。
jBarHandle = javax.swing.JProgressBar(0, 103);
jBarHandle.setStringPainted(true);
jBarHandle.setIndeterminate(false);
fig = figure('Position', [0 0 200 20]);
[jhandle, hhandle] = javacomponent(jBarHandle, [0 0 1 1], fig);
set(hhandle, 'parent', fig, 'Units', 'norm', 'Position', [0 0 1 1])
for k = 1:103
javaMethodEDT('setValue', jBarHandle, k);
pause(0.1);
end
传递给进度条的值应该只是本地范围内的变量。我不完全确定你为什么要用这个进度条覆盖一个滑块,但你可以通过简单地执行以下操作来链接这两个的值
listener = addlistener(handles.slider1, 'Value', 'PostSet', @(s,e)jBarHandle.setValue(e.NewValue));
然后,只要滑块值发生更改(以编程方式或通过GUI),进度条也会更新。
Yair Altman提供的EDT here中的更多信息。
如果要在GUI中保存java句柄,可以使用以下
setappdata(handles.fig, 'ProgressBar', jBarHandle);
然后从外部函数中,您可以通过以下方式检索它
figure_handle = findall(0, 'type', 'figure', 'tag', 'fig');
jBarHandle = getappdata(figure_handle, 'ProgressBar');
javaMethodEDT('setValue', jBarHandle, value)