【问题标题】:Uitable, cellSelectionCallback and modifying datasetUitable、cellSelectionCallback 和修改数据集
【发布时间】:2012-12-13 15:59:40
【问题描述】:

我的代码实在是太长了,不能在这里发布,即使是一小部分。所以我只要求一两件事: 在我看来,在修改 uitable 'ht' 的 'Data' 属性时:

set(ht, 'Data', something);

“cellSelectionCallback”例程被触发(因为选择很可能确实发生了变化),但不是在数据集修改后立即触发。

  1. 这是真的吗?
  2. 有没有办法防止这种行为?

谢谢!

【问题讨论】:

    标签: matlab matlab-uitable


    【解决方案1】:

    我有使用 uitable 的代码,例如:

    tbl = uitable('Parent', fh, 'CellSelectionCallback',{@cell_select_callback fh});
    

    我做了一个快速实验,当使用 set(tbl,'Data',my_data) 时,只有如果 set 导致所选单元格发生变化,并且这会立即发生(就我而言可以看出 - 我没有看到明显的延迟)。

    要阻止这种情况发生,您只需取消设置 CellSelectionCallback 属性,更改数据,然后重置 CellSelectionCallback

    【讨论】:

    • 感谢您的回答。没想到,我试试看。
    • 好的,所以它没有解决我的问题(重置 cellSelectionCallback 时,仍然调用 callbacki,至少在我的程序中)。我设法使用附加到 uitable 的 JTable 的 setValueAt(val, row, col) 方法避免了这个问题。这样不会修改“数据”属性,也不会触发回调函数。无论如何感谢您的帮助。
    【解决方案2】:

    我有同样的问题。收到index out of bounds 警告。为了摆脱我在CallSelectionCallback 中使用的那些:

    if ~isempty(eventdata.Indices)
     // all the code
    end
    

    当 set 命令触发 CallSelectionCallback 时,eventdata.Indices 为空。

    【讨论】:

      【解决方案3】:

      与 Sebastien 的回答类似的可能性是将其放入您的 cellselectioncallback 函数中:

      function output = mycellselection(source,event)
      
      if isempty(event.Indixes)
          output = [];
          return
      end
      % rest of your code for cell selection
      
      end
      

      如果您不需要任何输出,则可以将其删除。我只是把它放在那里提醒你,你必须为任何输出分配一个值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-21
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多