很简单,我正试图在MATLAB GUI中创建一个无边界按钮。原因主要是美学,所以没有必要争论为什么它应该是无边界的。
我已经知道,这不能单独使用内置的MATLAB uicontrol来完成,因为按钮的边界在MATLAB中不是可访问的属性。因此,必须访问底层JAVA代码(在其上编写MATLAB)才能操作边界。这就是我迷失的地方,因为我只在MATLAB中编程过。
我在这里举了一个例子:http://undocumentedmatlab.com/blog/borderless-button-used-for-plot-properties
但我仍然没有得到一个无边界的按钮。
这里有一个简单的代码示例(注意使用Yair Altman的findjobj,它可以在MATLAB文件交换中获得):
f=figure('Menubar','none', 'Position',[200 200 300 200]);
p=uipanel(f, 'BackgroundColor', [0 0 1]);
h = uicontrol('parent', p, ...
'Style','pushbutton', ...
'String','click', ...
'TooltipString', 'you should click this' ...
'Units','normalized', ...
'Position',[0.3 0.3 0.5 0.5], ...
'BackgroundColor', [0 0 1]);
jh = findjobj(h);
jh.setBorder(javax.swing.BorderFactory.createEmptyBorder());
%attempt 1 does not remove border
jh.border=[];
%attempt 2 does not remove border
jh.setBorder([]);
%attempt 3 does not remove border
jh.border=javax.swing.BorderFactory.createEmptyBorder();
%attempt 4 does not remove border
你觉得我哪里错了吗?谢谢
您应该添加两行:
jh.setBorderPainted(false);
jh.setContentAreaFilled(false);
我不清楚你说的"无边界"是什么意思。
看看你发布的网页上的例子,我想你正在寻找一个类似"隐形"按钮的东西。
如果是这样的话,你可以考虑另一种方式:
- 你可能有一个
static text uicontrol
,而不是一个按钮 - 使其
backgroundcolor
与GUI背景颜色相同(它将变为"不可见"且没有任何边界) - 不要在
static text uicontrol
中设置任何string
- 将
static text uicontrol
的enable
属性设置为off
- 为
static text uicontrol
定义ButtonDownFcn
- 按下
ButtonDownFcn
中的按钮,编写要执行的代码
当您在"不可见"的static text uicontrol
上按下鼠标按钮时,它的ButtonDownFcn
将被执行。
你只需要记住。。。如果static text uicontrol
是"不可见的"。
希望这能有所帮助。
边界受飞越外观功能的影响。http://undocumentedmatlab.com/blog/undocumented-button-highlighting您需要添加
jh.setFlyOverAppearance(true);
为我工作。