2016-07-12 3 views
0

Je l'ai créé dans Matlab avec menu déroulant. en quelque sorte le menu déroulant ne sont pas mis à jour avec le commutateur/casMatlab Uitable avec menu déroulant

enter image description here

J'ai essayé en remplaçant le commutateur/cas si la condition d'autre. le menu déroulant est mis à jour mais il ne me donne pas la sortie désirée!

pour simuler s'il vous plaît exécuter le code ci-dessous

enter image description here

Toute idée ou pointeurs?

function [] =foouitable() 

f = figure('Position',[100 100 400 150]); 

% Column names and column format 
columnname = {'Available','Options','SubOptions'}; 
columnformat = {'logical','bank',{'CheckBox' 'SelectSubOptions'}}; 

% Define the data 
d = {false 'Reconstruction' 'CheckBox';... 
    false 'Segmentation' 'CheckBox';... 
    false 'ComputerTomography' 'CheckBox';... 
    false, 'UltraSound', 'CheckBox';... 
    false, 'AcousticEmission', 'CheckBox'}; 

% Create the uitable 
t = uitable('Data', d,... 
    'ColumnWidth', {70 120 100},... 
    'ColumnName', columnname,... 
    'ColumnFormat', columnformat,... 
    'ColumnEditable', [true false true],... 
    'RowName',[],... 
    'CellEditCallback',@edit) 

set(t,'Tag','Config_table'); 

     function edit(src,evt) 
      if evt.Indices(2) == 1 
       modifyPopup(src) 
      end 
     end 


    % Set width and height 
    t.Position(3) = t.Extent(3); 
    t.Position(4) = t.Extent(4); 


     function modifyPopup(src) 
      id_group_1 = {'A.1';'A.2';'A.3'}; 
      id_group_2 = {'B.1';'B.2';'B.3'}; 
      id_group_3 = {'C.1';'C.2';'C.3'}; 
      id_group_4 = {'D.1';'D.2';'D.3'}; 
      id_group_5 = {'E.1';'E.2';'E.3'}; 
      id_default = {'CheckBox'}; 

      config_data = get(src,'Data'); 
      selector = config_data(1:5,1); 
      selector = cell2mat(selector); 



      config_format = get(src,'ColumnFormat'); 
      if isequal(selector(1),1) 
       config_format{3} = id_group_1'; 
      elseif isequal(selector(2),1) 
       config_format{3} = id_group_2'; 
       elseif isequal(selector(3),1) 
       config_format{3} = id_group_3'; 
       elseif isequal(selector(4),1) 
       config_format{3} = id_group_4'; 
       elseif isequal(selector(5),1) 
       config_format{3} = id_group_5'; 
      else 
       config_format{3} = id_default; 
      end 

      set(src,'Data',config_data); 
      set(src,'ColumnFormat',config_format); 
     end 
    end 

Merci d'avance!

+0

Veuillez fournir le code qui reproduit votre problème sans étapes de décomposition compliquées et expliquez quelle est la sortie souhaitée. – excaza

+0

J'ai modifié le code comme suggéré mon excaza. Lorsque je coche l'une des cases à cocher, je veux que le menu déroulant correspondant affiche les valeurs du groupe, tandis que les autres menus déroulants doivent rester inchangés. – sssc

+0

Pourquoi modifiez-vous 'config_format' dans votre bloc' if' et non dans 'config_data'? Pourquoi modifiez-vous '' ColumnFormat 'du tout? – excaza

Répondre

0

Merci pour l'indice excaza. Je l'ai implémenté Mais l'id_group_1 consiste maintenant en un tableau char 3x3 dans une de ses lignes.

[1] 'Reconstruction'  [3x3 char] 
[0] 'Segmentation'   'CheckBox' 
[0] 'ComputerTomography' 'CheckBox' 
[0] 'UltraSound'   'CheckBox' 
[0] 'AcousticEmission'  'CheckBox' 

enter image description here

comme ensemble (src, 'Données', config_data); ne permet pas un tableau de cellules. Pour le moment, il semble que je ne puisse pas éviter d'utiliser config_format dans la condition if/else !!

function modifyPopup(src) 
     id_group_1 = {true 'Reconstruction'... 
      ['A.1'; 'A.2'; 'A.3'];... 
      false 'Segmentation' 'CheckBox';... 
      false 'ComputerTomography' 'CheckBox';... 
      false, 'UltraSound', 'CheckBox';... 
      false, 'AcousticEmission', 'CheckBox'}; 

     id_group_2 = {false 'Reconstruction' 'CheckBox';... 
      true 'Segmentation' ['B.1'; 'B.2'; 'B.3'];... 
      false 'ComputerTomography' 'CheckBox';... 
      false, 'UltraSound', 'CheckBox';... 
      false, 'AcousticEmission', 'CheckBox'}; 

     id_group_3 = {false 'Reconstruction' 'CheckBox';... 
      false 'Segmentation' 'CheckBox';... 
      true 'ComputerTomography'... 
      ['C.1'; 'C.2'; 'C.3'];... 
      false, 'UltraSound', 'CheckBox';... 
      false, 'AcousticEmission', 'CheckBox'}; 

     id_group_4 = {false 'Reconstruction' 'CheckBox';... 
      false 'Segmentation' 'CheckBox';... 
      false 'ComputerTomography' 'CheckBox';... 
      true, 'UltraSound',... 
      ['D.1'; 'D.2'; 'D.3'];... 
      false, 'AcousticEmission', 'CheckBox'}; 

     id_group_5 = {false 'Reconstruction' 'CheckBox';... 
      false 'Segmentation' 'CheckBox';... 
      false 'ComputerTomography' 'CheckBox';... 
      false, 'UltraSound', 'CheckBox';... 
      true, 'AcousticEmission', ['E.1'; 'E.2'; 'E.3']}; 

     id_default = d; 
     config_data = get(src,'Data'); 
     selector = config_data(1:5,1); 
     selector = cell2mat(selector); 

     config_format = get(src,'ColumnFormat') 
     if isequal(selector(1),1) 
      config_data = id_group_1; 
     elseif isequal(selector(2),1) 
      config_data = id_group_2; 
     elseif isequal(selector(3),1) 
      config_data = id_group_3; 
     elseif isequal(selector(4),1) 
      config_data = id_group_4; 
     elseif isequal(selector(5),1) 
      config_data = id_group_5; 
     else 
      config_data = id_default; 
     end 
     %set(src,'ColumnFormat', config_format) 
     set(src,'Data',config_data); 

    end 
    end