Bonjour à tous,

Je participe au développement d'un outil sous Matlab R2013b (désolé, la MàJ n'est pas possible dans mon cas) et j'aide au développement de son interface graphique.

Je cherche utiliser une uitable, mais comme il n'existe pas beaucoup d'options sous Matlab pour la mettre en forme, j'utilise entre autre findjobj.
Mon objectif est que sa taille s'adapte à mes données, qu'elle soit placée de manière "normalisée" (ie Position décrite avec les coordonnées en pourcentage et non pas en nombre de pixels), et que celle-ci s'adapte à la modification de la taille de la fenêtre par l'utilisateur.

J'ai rencontré quelques soucis, et j'ai donc du bricoler un peu pour arriver au résultat souhaité : comme l'adaptation aux données ne semble fonctionner qu'avec les coordonnées par pixel, je suis obligé de rebasculer sur des coordonnées "normalisées" pour mon placement dans la fenêtre), et l'adaptation à la modification de la fenêtre est réalisée par l'appel à findjobj.

Je récupère alors une erreur lors de l'utilisation de l'objet renvoyé par findjobj :

No appropriate method, property, or field getViewport for class
javahandle_withcallbacks.com.mathworks.hg.peer.HeavyweightLightweightContainerFactory$UIComponentLightweightContainer.

Error in myJobGUI/InitMainFig (line 4805)
jTable = jscroll.getViewport.getView;
Mon gros problème est que cela se passe différemment en debugging... Et encore, je n'arrive pas toujours à comprendre quand cela marche ou pas... En tout cas, quand je lis les lignes pas à pas, tout fonctionne, mais dès que je lis tout d'un coup, cela ne fonctionne plus. D'ailleurs, j'observe pour mon interface graphique qu'elle s'affiche différemment quand cela bugue, l'adaptation de la taille au donnée ne se fait pas bien, comme si elle était passée en système de coordonnées normalisées avant d'avoir réalisé le recadrage...
Au cours de mes recherches, j'ai lu que l'allocation des ressources étaient differentes en mode debugging... Je me suis donc dit que cela venait de là, mais aucune idée de la raison profonde de mon problème... Pour information, cela n'a rien à voir avec les autre fichiers .mat, car le problème appairait lorsque je lance simplement le script de mon interface.

Voici ci-dessous le bout de code qui pose problème, inséré ici dans une classe simplifiée (normalement, mon uitable est insérée dans plusieurs Panels). Il est intéressant de noter que ce bout de code fonctionne parfaitement, mais bugue dès qu'il est insérré dans mon interface principale; ce qui me conforte dans cette histoire d'allocation des ressources.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
classdef GUI_test < handle
 
     properties   
 
       version      =   0000000;
        % GUI state related members
        gui_state   =   [];
        % GUI handles
        gui_handles =   [];       
 
   end % end of properties
 
    methods
 
        function self = GUI_test(self)
            InitMainFig(self);
        end     
    end
 
    methods (Access = private)
 
        function self = InitMainFig(self)
            self.gui_handles.MainFig = figure( ...
                'Units', 'normalized', ...
                'Position', [0.1 0.1 0.4 0.4], ...
                'MenuBar', 'none', ...
                'Name', 'my GUI',...
                'NumberTitle', 'off')
 
            values={'0.5','42 %';'0.7','28 %'};
            rnames = {'Title 1','Title 2'};
            cnames = {'Field 1','Field 2'};
 
            self.gui_handles.FinalValuesTable_SVSTM = uitable( ...
                'Parent', self.gui_handles.MainFig, ...
                'Data',values, ...
                'FontSize', 12, ...
                'FontWeight', 'bold', ...
                'FontName','FixedWidth', ...
                'ColumnName', cnames, ...
                'RowName', rnames, ...
                'Position', [1 1 400 100]);
 
            % à partir d'ici, cela ne fonctionne que si je lis le script pas à pas...
 
            % adapter la taille du tableau aux données
 
            extendpanel=get(self.gui_handles.FinalValuesTable_SVSTM,'Extent');
            set(self.gui_handles.FinalValuesTable_SVSTM,'Position',extendpanel);
 
            % positionner le tableau de façon "normalisée"
 
            set(self.gui_handles.FinalValuesTable_SVSTM,'Units','normalized');
            positionpanel=get(self.gui_handles.FinalValuesTable_SVSTM,'Position');
            positionpanel(1)=0.01;
            positionpanel(2)=0.07;
            set(self.gui_handles.FinalValuesTable_SVSTM,'Position',positionpanel);
 
            % modifier la fenêtre de façon à ce qu'elle soit flexible
            % lorsqu'on change la taille de la fenêtrer
 
            jscroll=findjobj(self.gui_handles.FinalValuesTable_SVSTM);
 
            jTable = jscroll.getViewport.getView; %erreur dans mon vrai code
            jTable.setAutoResizeMode(jTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
        end
    end
end
Auriez-vous des idées quant à la source du problème ? Ou une manière différente de répondre à mes contraintes graphiques plus... robuste

Merci d'avance !

Bonne journée.