Matlab R2014a中创建被uipanel部分覆盖的uicontrol
搞定Matlab R2014a里uipanel部分覆盖uicontrol的需求
嘿,我来帮你解决这个问题!先看你给的代码,有几个小细节得调整才能实现“uicontrol被uipanel部分覆盖”的效果,我给你梳理清楚并写出完整的可运行代码:
首先说下你现有代码的问题:
- 你设置的
mainPanel高度是500,但figure的高度只有300,这会导致panel直接超出figure的可视范围,看不到完整效果; - 你把uicontrol的父对象设成了panel,那它默认就完全在panel内部,根本没法被panel覆盖——要实现覆盖,得让两者处于同一父层级(也就是都以figure为父对象),然后控制它们的前后顺序。
下面是调整好的完整代码:
function test() % 创建主窗口 h = figure; set(h, 'Position', [100, 100, 500, 300]); % 先创建下拉菜单(让它默认在下层) myPopup = uicontrol( ... 'Parent' , h , ... 'Units' , 'pixels' , ... 'Style' , 'popupmenu' , ... 'String' , {'S1', 'S2', 'S3'}, ... 'Position', [100, 100, 200, 30], % 补全了高度参数,不然会报错 'BackgroundColor', 'white' ... ); % 创建面板,设置和下拉菜单重叠,并且放在上层实现覆盖 mainPanel = uipanel( ... 'Parent' , h , ... 'Units' , 'pixels' , ... 'Position' , [10, 10, 250, 200], % 这个位置会覆盖下拉菜单的左半部分 'BackgroundColor', [0.6, 0.6, 0.6], ... 'ZOrder', 'front' % 关键!把面板放在最上层,才能挡住下拉菜单的一部分 ); end
几个关键点给你唠明白:
- 父对象要选对:把uicontrol的父对象设为figure,不是panel,这样它和panel平级,才有机会被覆盖;
- ZOrder控制层级:
'ZOrder', 'front'这个属性是核心,它让panel跑到uicontrol的前面,实现遮挡效果; - 位置要重叠:调整panel的Position参数,让它和uicontrol有重叠区域,比如上面的代码里,panel宽度250,下拉菜单从x=100开始,所以panel会挡住下拉菜单的左半段;
- 补全参数:你原来的uicontrol代码没写完Position的第四个值(高度),我给补上了30,不然Matlab会直接报错哦。
如果你的需求是让uicontrol一部分在panel内部、一部分露在外面,这个代码也完全适用,只要调整两者的Position参数控制重叠区域就行~
内容的提问来源于stack exchange,提问作者Jepessen
相关产品推荐
相关产品推荐

