2016-03-08 47 views
3

我创建GUI,我想有输入和结果存在。对齐文本和编辑uicontrols

我有text字段作为标签和editpopup作为输入。当我有

uicontrol('style','text','string','foo','units','centimeters','position',[1 1 1 0.5]); 
uicontrol('style','edit','string','foo','units','centimeters','position',[2 1 1 0.5]); 

我得到的foo字符串稍微有点错位,在text场的基线edit/pop领域的基线略高于。

我怎样才能对准那些领域?

+1

垂直居中的文本您将需要直接访问底层Java的'text uicontrol'。 [这篇文章](http://stackoverflow.com/questions/8225543/how-to-align-text-to-the-top-of-the-button-in-matlab-gui)显示了一般的方法。修改'edit uicontrol'的背景色没有任何影响,MATLAB在控件启用时强制颜色变为白色。 – excaza

+0

@excaza你想扩大它的答案? – Crowley

回答

5

很不幸,这需要访问底层Java。该方法类似于Amro's approach herepushbutton,并利用外部findjobj功能:通过像素或两个

h.t = uicontrol('style','text','string','foo','units','centimeters','position',[1 1 1 0.5]); 
h.e = uicontrol('style','edit','string','foo','units','centimeters','position',[2 1 1 0.5]); 
jh = findjobj(h.t); 
jh.setVerticalAlignment(javax.swing.JLabel.CENTER) 

不幸的是,这是尚客:

yay

我想说的只是撞通过像素的文本框,在必要时:

oldunits = get(h.t, 'Units'); 
set(h.t, 'Units', 'Pixels'); 
pos = get(h.t, 'Position'); 

pos(2) = pos(2) + 1; 

set(h.t, 'Position', pos) 
set(h.t, 'Units', oldunits) 

这给了我们:

yay2


编辑:修改编辑框的BackgroundColor属性没有任何效果(尽管它设置为none使它成为一个黑盒子......),和盒子将保持默认的颜色。每The MathWorks公司,这是一个design decision

这是方式的预期行为MATLAB显示 BackgroundColor为可编辑的文本对象。

这也可能最有可能通过利用底层Java更新,但我不熟悉。

1

另一种选择是使用一个JLabel,这是一个Javacomponent。我发现了来自无证mamatlab的uicomponent有帮助。您可以从Mathworks公司下载使用这个链接文件交换:https://uk.mathworks.com/matlabcentral/fileexchange/14583-uicomponent-expands-uicontrol-to-all-java-classes

见这个例子:

figure(1);clf; 

[txt1, txt2] = uicomponent(gcf, 'style','JLabel'); % simple spinner with initial value 
set(txt1, 'Text', 'Test', 'units','centimeters','position',[1 1 1 1]); 
set(txt2, 'horizontalAlignment', javax.swing.SwingConstants.LEFT); 
set(txt2, 'VerticalAlignment', javax.swing.SwingConstants.CENTER); 

uicontrol('style','edit','string','foo','units','centimeters','position',[2 1 1 1]); 

它可以创建类似下面的UI:

enter image description here