2012-12-13 36 views
2

我的代碼真的太長了,無法在這裏發佈,即使是小部分。因此,我將只要求一兩件事情: 修改uitable「HT」的「數據」屬性時,在我看來是:Uitable,cellSelectionCallback和修改數據集

set(ht, 'Data', something); 

的「cellSelectionCallback」程序被觸發(作爲選擇實際上很可能已經改變),但是在數據集被修改之後並不立即。

  1. 這是真的嗎?
  2. 有什麼辦法可以防止這種行爲?

謝謝!

回答

2

我使用uitable有代碼,例如:

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

我做了一個快速的實驗和使用set(tbl,'Data',my_data)當觸發回調如果set使所選擇的單元格改變,並這種情況會立即發生(據我所知 - 我沒有看到明顯的延遲)。

要停止這種情況,您可以取消設置CellSelectionCallback媒體資源,更改數據,然後重置CellSelectionCallback

+0

感謝您的回答。沒有想到,我會嘗試。 – embrouille

+0

隨時接受答案! – Justin

+0

好吧,所以它沒有解決我的問題(重置cellSelectionCallback時,callbacki仍然在我的程序中調用,至少)。我設法避免使用附加到可用的JTable的setValueAt(val,row,col)方法的問題。這樣'Data'屬性不會被修改,並且回調函數不會被觸發。 無論如何感謝您的幫助。 – embrouille

1

我有同樣的問題。獲得index out of bounds警告。爲了擺脫那些我在CallSelectionCallback用這個的:

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

當set命令觸發CallSelectionCallbackeventdata.Indices是空的。

1

類似的可能性塞巴斯蒂安的答案是把這個在您的cellselectioncallback功能:

function output = mycellselection(source,event) 

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

end 

如果沒有任何輸出需要做的,你可以將其刪除。我只是把它放在那裏提醒你,你必須爲任何輸出分配一個值。