2014-12-17 3 views
2

фона

Мы мигрируем наш MatLab кодовые от R2013b к R2014b и мы испытываем множество мелких проблем, особенно с ГПИ (ну это вполне мы боялись из-за новый графическим система HG2).GUI миграция R2013b -> R2014b - проблема прозрачности

Выпуск

Один из вопросов, которые мы для некоторых кнопок мы настроены с помощью советов и рекомендаций от Undocumented Maltab сайта и 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 ==> $ Версия: 1.43 $ $ Дата: 2014/10/20 04:24:43 $).

NB2: Мы также пробовали модифицировать другие свойства Java, но без эффекта:

jBtn.setOpaque(0); 
jBtn.setBorderPainted(0); 
jBtn.setContentAreaFilled(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 

Debug

Глядя глубоко, что возвращается findjobj для uicontrol в R2013b и R2014b (и используя тот же реверсии findjobj $ 1,43 в R2013b и R2014b):

  • javahandle_withcallbacks.com.mathworks.hg.peer.PushButtonPeer $ 1
Смежные вопросы