如何在 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 uicontrol
的enable
属性设为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);
对我有用。
很简单,我正在尝试在 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
中设置任何 - 将
static text uicontrol
的enable
属性设为off
- 定义,对于
static text uicontrol
ButtonDownFcn
- 按下
ButtonDownFcn
中的按钮,编写您要执行的代码
string
当您在"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);
对我有用。