2015-10-16 2 views
0

У меня есть класс вроде этого. Я хочу динамически добавлять и удалять строки по мере необходимости. Метод AddRow не работает. Не знаете, как это сделать.Добавьте строку с именем динамически в Matlab uitable

Используя следующий код, я вижу, что строка данных добавляется, но имя не отображается. Я делаю это неправильно или возможно, что имя есть, но столбец не виден?

classdef BidAskDisplay < handle 
    properties 
     f 
     ut 
     myhandles 
    end 

    methods  
     function self = BidAskDisplay(name, colNames) 
      self.CreateBidAskDisplay(name, colNames); 
     end 

     function CreateBidAskDisplay(self, name, colNames) 
      % Example quote display 
      % Copyright 2015 The MathWorks, Inc. 

      self.f = figure; 
      self.f.Name = name; 

      self.ut = uitable(self.f, 'ColumnName', colNames, 'RowName',[]); 
      self.ut.Units = 'normalized'; 
      self.ut.ColumnWidth = {150}; 
      self.ut.Position(3) = self.ut.Extent(3); 
      self.ut.Position(4) = 0.9; 
      self.ut.Data = repmat({'NaN'},0 ,3); 

      self.myhandles = guidata(self.ut); 
     end 

     function AddRow(self, rowName)    
      data = get(self.myhandles, 'Data');    
      newRowdata = cat(1, data, cell(1, size(data, 2)));    
      set(self.ut, 'Data', newRowdata) 

      k = size(data, 1) + 1; % Which row number does the new row get 
      rnames = get(self.myhandles, 'RowName'); 
      rnames{k, 1} = rowName; 

      set(self.myhandles, 'RowName', rnames);   
     end 
    end 
end 
+0

сделать свой класс а 'handle' класс, иначе вы должны вызвать что-то вроде' OBJ = obj.AddRow' для класса значения – scmg

+0

Спасибо Я сделал это изменение. Если вы не возражаете, я очень новичок в Matlab. Не знаете, как добавить новую строку? – Ivan

ответ

0

Согласно вашей инициализации self.ut.Data = repmat({'NaN'},0 ,3);, ваша таблица имеет 3 столбца. Чтобы добавить новую строку, вам необходимо изменить table.Data, а не RowNames. Таким образом, ваша функция AddRow должна быть похожа на следующий пример:

function AddRow(self, new_row_data) 
    % new_row_data must be a cell of size 1x3 
    % e.g. new_row_data = {'a1', 'b2', 'c3'} 
    self.ut.Data = [self.ut.Data; new_row_data]; 
end