Я нашел решение:
Для статических текстовых полей можно использовать свойство «Степень» UI (http://www.mathworks.com/help/matlab/ref/uicontrol-properties.html#property_extent), чтобы получить нужный размер текстового поля.
Для окна редактирования это, к сожалению, возвращает текущий видимый размер, а не предпочтительный размер (Text 'Extent' property doesn't contain the correct size). Предпочтительный размер можно получить, вызвав вызовы java-интерфейса (компоненты Matlab - это просто (в основном?) Обернутые компоненты java swing). Используйте функцию findjobj (http://www.mathworks.com/matlabcentral/fileexchange/14317-findjobj-find-java-handles-of-matlab-graphic-objects), чтобы получить дескриптор java окна редактирования и получить предпочтительный размер поля.
Кода для достижения автоматического изменения размера шрифта (например, что максимальный размер шрифта, который по-прежнему соответствует всей строке используется):
% --- Executes on key press with focus on edit1 and none of its controls.
function edit1_KeyPressFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata structure with the following fields (see MATLAB.UI.CONTROL.UICONTROL)
% Key: name of the key that was pressed, in lower case
% Character: character interpretation of the key(s) that was pressed
% Modifier: name(s) of the modifier key(s) (i.e., control, shift) pressed
% handles structure with handles and user data (see GUIDATA)
H = hObject;
position = get(H,'Position');
width = position(3);
javaH = findjobj(H);
for FontSize = 48:-2:12
javaH.setFont(javaH.getFont().deriveFont(FontSize));
prefWidth = javaH.getPreferredSize.getWidth;
if prefWidth < width
break; % Escape loop: for FontSize
end
end
я использовал метод Java, чтобы изменить размер шрифта, как я заметил, что предпочтительный (с задержкой на 1 итерацию?) при использовании вызова Matlab (H, 'FontSize', FontSize).