Java ProgressBar для Matlab, как вы передаете значения для него?

Я наткнулся на интересную альтернативу matlab waitbar, которая написана на Java, как показано ниже.

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. Но как передать переменную_данных в setValue?

кто-нибудь пробовал это? или есть идеи? пожалуйста помоги.

1 ответ

Решение

Вы можете передать переменную непосредственно в 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));

Затем, когда значение ползунка изменяется (программно или через графический интерфейс), индикатор выполнения также обновляется.

Больше информации в EDT здесь предоставлено Яиром Альтманом.

Если вы хотите сохранить свой дескриптор Java в графическом интерфейсе, вы можете использовать следующее

setappdata(handles.fig, 'ProgressBar', jBarHandle);

Затем из внешней функции вы можете получить его следующим образом

figure_handle = findall(0, 'type', 'figure', 'tag', 'fig');
jBarHandle = getappdata(figure_handle, 'ProgressBar');
javaMethodEDT('setValue', jBarHandle, value)
Другие вопросы по тегам