2

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

关于我哪里出错了有什么想法吗?谢谢!

4

3 回答 3

1

你应该添加两行:

jh.setBorderPainted(false);    
jh.setContentAreaFilled(false);
于 2016-12-20T16:31:19.647 回答
0

我不清楚你所说的“无边界”是什么意思。

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

如果是这样,您可以考虑这种替代方式:

  • 有一个按钮,你可能有一个static text uicontrol
  • 使其backgroundcolor与 GUI 背景颜色相同(它将变得“不可见”并且没有任何边框)
  • 不要stringstatic text uicontrol
  • enable属性设置static text uicontroloff
  • 定义,static text uicontrol对于ButtonDownFcn
  • 通过按下按钮来编写你想要执行的代码ButtonDownFcn

当你在“隐形”上按下鼠标按钮时static text uicontrol,它ButtonDownFcn就会被执行。

你只需要记住......是“隐形”static text uicontrol是。

希望这可以帮助。

于 2015-07-01T18:48:11.197 回答
0

边界受飞越外观特征的影响。http://undocumentedmatlab.com/blog/undocumented-button-highlighting 需要添加

jh.setFlyOverAppearance(true);

为我工作。

于 2017-02-02T03:27:33.560 回答