GUI Migration R2013b - > R2014b - 透明度问题

时间:2014-12-17 15:18:08

标签: matlab user-interface

背景

我们正在将我们的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); 

是否有任何人遇到同样的问题和/或指导来解决这个问题?

1 个答案:

答案 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版本):

  • javahandle_withcallbacks.com.mathworks.hg.peer.PushButtonPeer $ 1