如何在 MATLAB GUI 中制作一个简单的无边框按钮

How to make a simple borderless button in MATLAB GUI

很简单,我正在尝试在 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

关于我哪里出错的想法?谢谢!

我不清楚你对 "borderless" 的意思。

查看您发布的网页上的示例,我假设您正在寻找类似 "invisible" 按钮的东西。

如果是这样,您可以考虑以下替代方法:

  • 如果没有按钮,你可能会有 static text uicontrol
  • 使其 backgroundcolor 与 GUI 背景颜色相同(它将变为 "invisible" 并且没有任何边框)
  • 不要在 static text uicontrol
  • 中设置任何 string
  • static text uicontrolenable属性设为off
  • 定义,对于static text uicontrol ButtonDownFcn
  • 按下 ButtonDownFcn
  • 中的按钮,编写您要执行的代码

当您在"invisible"static text uicontrol上按下鼠标按钮时,它的ButtonDownFcn将被执行。

你只需要记住... "invisible" static text uicontrol 是什么。

希望这对您有所帮助。

您应该添加两行:

jh.setBorderPainted(false);    
jh.setContentAreaFilled(false);

边框受 fly-over 外观特征影响。 http://undocumentedmatlab.com/blog/undocumented-button-highlighting 您需要添加

jh.setFlyOverAppearance(true);

对我有用。