我们正在将我们的matlab代码库从R2013b迁移到R2014b,我们正在经历许多小问题,特别是GUI(我们担心这是因为新的图形系统HG2)。
我们遇到的一个问题是我们使用来自Undocumented Maltab网站的提示和技巧以及来自@ yair-altman的findjobj例程来定制的一些按钮。我们自定义这些按钮以具有透明效果,并具有看起来像超链接的按钮。下面的代码适用于R2013b,但是使用R2014b时,只要用鼠标调整图形大小,边框就会重新出现:
function [] = MigrationTransparency()
%[
figure(42); clf;
hBtn = uicontrol('String', '<html><a href ="">Edit reconstruction grid</a></html>', 'Position', [10 10 170 25]);
jBtn = findjobj(hBtn);
jBtn.setCursor( java.awt.Cursor(java.awt.Cursor.HAND_CURSOR) );
jBtn.setContentAreaFilled(0); % R2013b ==> No issue (the btn border is removed)
% R2014b ==> The btn border reappears if figure is resized.
%]
end
NB1:我们使用的findjobj
版本是最后一个(均为R2013b和R2014b ==&gt; $修订版:1.43 $ $日期:2014 / 10/20 04:24:43 $)。
NB2:我们也尝试修改其他java属性但没有效果:
jBtn.setOpaque(0);
jBtn.setBorderPainted(0);
jBtn.setContentAreaFilled(0);
是否有任何人遇到同样的问题和/或指导来解决这个问题?
答案 0 :(得分:0)
好吧,即使对我们来说不太清楚,我们也找到了解决方法......
如果我们首先创建java组件(而不是用findjobj
找到它),它可以工作:
function [] = MigrationTransparency()
%[
figure(42); clf;
doCreateJavaObjectFirst = true;
if (doCreateJavaObjectFirst)
% Is ok with R2013a and R2014b
% 1) Create java object
jBtn = javax.swing.JButton('<html><a href ="">Edit reconstruction grid</a></html>');
jBtn.setCursor(java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
jBtn.setContentAreaFilled(0);
% 2) Place component in the figure
hBtn = javacomponent(jBtn, [10 10 170 25]);
else
% Is not ok with R2014b (border reappears on resize)
% 1) Create matlab control
hBtn = uicontrol('String', '<html><a href ="">Edit reconstruction grid</a></html>', 'Position', [10 10 170 25]);
% 2) Find underlying java object
jBtn = findjobj(hBtn);
jBtn.setCursor(java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
jBtn.setContentAreaFilled(0);
disp(jBtn); % To display data type
end
%]
end
深入了解findjobj
为R2013b和R2014b中的uicontrol
返回的内容(并在R2013b和R2014b中使用相同的findjobj
$ 1.43版本):