Jen*_*sen 6 windows matlab user-interface matlab-figure matlab-java
我想在GUI中放置一些文本,我想知道uicontrol类型的确切大小'text'!
我发现有几个线程解释说这可以使用包含相同文本'Extent'的'text'对象的属性来完成,参见示例:
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
Run Code Online (Sandbox Code Playgroud)
我现在的问题是,这不起作用.当我运行上面的内容时,tempfunc(repmat('A',14));我得到下面的图窗口:

从图像中可以看出,textsize变量中提取的文本的高度太小了!
请注意,这是我在运行Matlab R2014a的Windows计算机上运行程序时得到的结果.我后来在运行Matlab R2013b的Linux机器上运行完全相同的代码,在那台机器上我得到了我想要的结果.
我正在制作的GUI应该(希望)能够在任何计算机上运行,但是现在我真的不知道如何继续制作适用于任何机器的版本,所以请帮助我!
编辑: 我试图在运行Matlab R2011b(而不是我的R2014a)的另一台Windows 7机器(这次是Ultimate版本而不是我的企业版)上运行相同的代码,它仍然产生错误的文本框高度 - 但这一次文字框太高 - 见图片:

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

我还试图看看我的屏幕分辨率的不同选择是否有所不同 - 他们没有.
EDIT3:
我注意到不同的字体在高度上产生不同的错误,例如默认字体(MS Sans Serif)产生的文本框太高(并且随着更多行的添加,这个高度错误也会增加) - 在Linux上然而我得到了我尝试的所有字体的正确结果.
但我真正感兴趣的是使用快递字体的情况,因为我需要一个等宽字体用于我的目的.
观察 Java 方面,Swing组件有几个有趣的方法:
getVisibleRect getSize(根据我的测试,它给出了与 类似的结果getVisibleRect)getPreferredSize问题是,“首选尺寸”似乎是正确的尺寸(您寻求的),而返回的尺寸get(...,'Extent');是可见尺寸,其含义如下:
获取可见矩形()
返回 Component 的“可见矩形” - 该组件的可见矩形、 new Rectangle(0, 0, getWidth(), getHeight()) 及其所有祖先的可见矩形的交集。
为了澄清上述内容:图形窗口的特定于主题和平台的装饰可能会减少组件的可用空间,从而减少其可见大小(如此处所述)。
作为一个数值示例,当使用默认设置 和 运行时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).
总结一下:
将您找到的两行替换为textsize:
v = 找工作j(u); textsize = [v.getPreferredSize.getWidth v.getPreferredSize.getHeight];
利润。
聚苯乙烯
我的推理可能有缺陷并且对 Swing 的理解不正确,但是这个解释对我来说是有道理的,更重要的是 - 它有效。