用于matlab的Java进度条,如何将值提供给它?

时间:2016-02-24 16:39:12

标签: swing matlab matlab-guide

我遇到了一个来自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?

是谁试过这个?或者有任何想法?请帮忙。

1 个答案:

答案 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

enter image description here

传递给进度条的值应该只是本地范围内的变量。我不完全确定你为什么要用这个进度条覆盖一个滑块,但你可以通过简单地执行以下操作来链接这两个的值

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)