Автоматическая прокрутка вниз в текстовом окне Matlab (uicontrol) - PullRequest
0 голосов
/ 08 марта 2019

Я хочу использовать Matlab для непрерывного чтения файла и отображения его в специальном окне.Поэтому я использую команду uicontrol.Это хорошо работает, но я хочу переходить непосредственно в конец конца контента каждый раз, когда обновляю контент.Есть ли какое-нибудь решение для этого?

MWE:

figHandle = figure('units','pixels',...
                'position',[40 40 240 940],...
                'menubar','none',...
                'resize','off',...
                'numbertitle','off',...
                'name','window custom')
txHandle = uicontrol('style','edit',...
                'units','pix',...
                'position',[10 60 220 830],...
                'backgroundcolor','w',...
                'HorizontalAlign','left',...
                'min',0,'max',10,...
                'enable','inactive');
txt=repmat('t|',1,100000);
set(txHandle,'string',cat(1,get(txHandle,'string'),{txt}));

1 Ответ

1 голос
/ 08 марта 2019

Нет чистого MATLAB способа сделать это, но это вполне возможно, если использовать недокументированные методы, манипулируя нижележащими java компонентами.

Первое, что нужно - это утилита findjobj от Matlab central.Вам нужно скачать эту функцию и сделать ее доступной в вашем пути MATLAB.Эта функция извлекает дескриптор java-объекта, лежащего в основе текстового поля MATLAB.

Когда у вас есть доступ к java-методам текстового поля, перемещение caret в конец текста становится тривиальным, вы простонеобходимо вызвать один из методов компонента: setCaretPosition(positionIndex).

Как только у вас есть функция findjobj в вашем пути MATLAB, просто добавьте этот код после кода вашего примера:

% Get the handle of the jave edit box
jtxtBox = findjobj(txHandle) ;
% Get the handle of the jave "panel" component
jTxtPane = jtxtBox.getComponent(0).getComponent(0) ;
% move the caret to the end of the text
jTxtPane.setCaretPosition( numel(txt) );

и вуаля: -)

...