加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 文本’Extent’属性不包含正确的大小

发布时间:2020-12-14 02:21:02 所属栏目:Windows 来源:网络整理
导读:我想在GUI中放置一些文本,我想知道’text’类型的uicontrol需要的确切大小! 我发现有几个线程解释说这可以使用包含相同文本的’text’对象的’Extent’属性来完成,参见示例: function form = tempfunc(txt,font,fontsize) if nargin 3 fontsize = 10; end
我想在GUI中放置一些文本,我想知道’text’类型的uicontrol需要的确切大小!

我发现有几个线程解释说这可以使用包含相同文本的’text’对象的’Extent’属性来完成,参见示例:

function form = tempfunc(txt,font,fontsize)
    if nargin <3
        fontsize = 10;
    end
    if nargin < 2
        font = 'courier';
    end
    f = figure('Visible','off','Units','pixels');
    u = uicontrol(f,'Style','text','pixels','String',txt,'FontName','FontSize',fontsize);
    textsize = get(u,'Extent');
    textsize = textsize(3:4);
    close(f);

    form = figure('Units','pixels');
    uicontrol(form,fontsize,'Position',[5,5,textsize]);
end

我现在的问题是,这不起作用.
当我使用tempfunc运行上面的内容时(repmat(‘A’,14));我得到下面的图窗口:

从图像中可以看出,在textsize变量中提取的文本的高度太小了!

请注意,这是我在运行Matlab R2014a的Windows计算机上运行程序时得到的结果.我后来在运行Matlab R2013b的Linux机器上运行完全相同的代码,在那台机器上我得到了我想要的结果.

我正在制作的GUI应该(希望)能够在任何计算机上运行,??但是现在我真的不知道如何继续制作适用于任何机器的版本,所以请帮助我!

编辑:
我试图在运行Matlab R2011b(而不是我的R2014a)的另一台Windows 7机器(这次是Ultimate版而不是我的企业版)上运行相同的代码,它仍然产生了错误的文本框高度 – 但这次是文本框太高了 – 看图像:

EDIT2:
我终于安装了R2014b,但遗憾的是它没有帮助!
我看到了类似的图片:

我还试图看看我的屏幕分辨率的不同选择是否有所不同 – 他们没有.

EDIT3:

我注意到不同的字体在高度上产生不同的错误,例如默认字体(MS Sans Serif)会产生一个太高的文本框(随着更多行的添加,这个高度错误也会增加) – 在Linux上我得到了我尝试的所有字体的正确结果.

但我真正感兴趣的是使用快递字体的情况,因为我需要一个等宽字体用于我的目的.

解决方法

观察Java方面的事情,Swing组件有几种感兴趣的方法:

> getVisibleRect
> getSize(根据我的测试,它给getVisibleRect提供了可比较的结果)
> getPreferredSize

问题是,“首选大小”似乎是正确的大小(你寻求),而get(…,’Extent’)返回的大小;是可见大小,具有以下含义:

getVisibleRect()

Returns the Component’s “visible rectangle” – the intersection of this component’s visible rectangle,new Rectangle(0,getWidth(),getHeight()),and all of its ancestors’ visible rectangles.

为了阐明上述内容:图形窗口的主题和平台特定装饰可能会减少组件的可用空间,从而减小其可见尺寸(如here所述).

作为一个数字示例,当使用默认设置和repmat(‘A’,14)运行时,我得到(在Win7上,MATLAB 2015a):

>得到(你,’范围’) – [0,116,214]
> jHandle.getVisibleRect – java.awt.Rectangle [x = 0,y = 0,width = 116,height = 214]
> jHandle.getSize – java.awt.Dimension [width = 116,height = 214]
> jHandle.getPreferredSize – java.awt.Dimension [width = 116,height = 221]

现在问题是如何方便地获得PreferredSize(或jHandle,它可以从中检索)…

我使用的一个选项是findjobj实用程序,其用法与jHandle = findjobj(u)一样简单.

总结一下:

>将findjobj放在工作文件夹中.
>替换找到textize的两行:

v = findjobj(u); textsize = [v.getPreferredSize.getWidth v.getPreferredSize.getHeight];

>利润.

附:

我的推理可能有缺陷,对Swing的理解不正确,但这种解释对我来说更有意义,更重要的是 – 它有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读