如何确定编辑框是否溢出(Matlab GUI)?

时间:2015-11-05 08:05:29

标签: matlab user-interface

我尝试创建一个文本框,一旦框已满或溢出,字体会调整大小。

除了将字体类型设置为固定宽度,并手动计算每个字体大小适合的字符数外,是否有自动/编程方式来执行此操作?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

对于静态文本框,可以使用' Extent' UI属性(http://www.mathworks.com/help/matlab/ref/uicontrol-properties.html#property_extent)以获取文本框的首选大小。

对于编辑框,这不幸地返回当前可见大小而不是首选大小(Text 'Extent' property doesn't contain the correct size)。可以通过调用java UI调用来获取首选大小(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方法来改变字体大小,因为我注意到当使用Matlab集(H,&#39; FontSize&#39;,FontSize)时,首选的宽度调用是不正确的(延迟1次迭代?)调用