gpt4 book ai didi

windows - 文本 'Extent' 属性不包含正确的大小

转载 作者:可可西里 更新时间:2023-11-01 13:27:21 24 4
gpt4 key购买 nike

我想在 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','Units','pixels','String',txt,'FontName',font,'FontSize',fontsize);
textsize = get(u,'Extent');
textsize = textsize(3:4);
close(f);

form = figure('Units','pixels');
uicontrol(form,'Style','text','Units','pixels','String',txt,'FontName',font,'FontSize',fontsize,'Position',[5,5,textsize]);
end

我现在的问题是这不起作用。当我用 tempfunc(repmat('A',14)); 运行上面的代码时,我得到下图窗口:

enter image description here

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

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

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

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

enter image description here

编辑 2:我终于安装了 R2014b,但遗憾的是它没有帮助!我有一张看起来很相似的图片:

enter image description here

我还尝试查看不同的屏幕分辨率选择是否有任何不同 - 它们没有。

编辑 3:

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

但实际上我最感兴趣的是使用 courier 字体的情况,因为我需要等宽字体来实现我的目的。

最佳答案

观察事物的 Java 方面,Swing组件有几个有趣的方法:

问题是,“首选大小”似乎是正确的大小(您寻求的大小),而 get(...,'Extent'); 返回的大小是visible尺寸,含义如下:

getVisibleRect()

Returns the Component's "visible rectangle" - the intersection of this component's visible rectangle, new Rectangle(0, 0, getWidth(), getHeight()), and all of its ancestors' visible rectangles.

澄清以上内容:图形窗口的特定于主题和平台的装饰可能会减少组件的可用空间,从而减少其可见大小(如前所述 here )。

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

  • get(u,'Extent') - [0,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) 一样简单。

总结:

  1. findjobj 放在您的工作文件夹中。
  2. textsize 所在的两行替换为:

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

  3. 利润。

附言

我的推理可能有缺陷并且对 Swing 的理解不正确,但是这个解释对我来说很有意义,更重要的是 - 它有效。

关于windows - 文本 'Extent' 属性不包含正确的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28344265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com