2016-07-02 65 views
2

我經常使用openvar('myArrayName')來瀏覽我的數據。但是,由於Excel能夠一次性縮小所有列,所以我看到了大量數據。使用有限的桌面空間是非常令人窒息的,我必須同時在同一列中排列很少的列。手動調整每列不是一個好的解決方案,因爲我經常打開變量,而且它們通常有很多列。有沒有辦法以批量方式縮小列?在Matlab變量編輯器中縮小所有列的範圍

回答

1

這不是一個完美的解決方案,但可以讓你開始。基本思想是首先get a handle to underlying java table,然後調整所有列的大小,例如如建議here。您可以下載TableColumnAdjuster java類,將其打包成jar並使用javaclasspath加載。當使用findjobj搜索java句柄時,請注意,表類將取決於您嘗試顯示的變量的類型(一些示例here),所以我們需要找到正確的句柄。

javaaddpath('path\to\TableColumnAdjuster.jar'); 
my_var= randn(1e4,10); 
openvar('my_var'); 
resizevar('my_var'); 

function resizevar(name) 
    desktop = com.mathworks.mde.desk.MLDesktop.getInstance(); 
    varclient = desktop.getClient(name); 
    jh = findjobj(varclient); 
    hNames = get(jh, 'Name'); 
    validNames = {'VariableTable','CellTable','DatasetVariableTable','TableObjectVariableTable','CategoricalVariableTable','TimeSeriesArrayEditorTablePanel:fDataTable'}; 
    jTable = jh(find(ismember(hNames, validNames),1)); 

    jTable.setAutoGrowthTemporarilyDisabled(true); 
    jTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF); 
    pause(0.1); 

    spacing = 10; 
    tca = TableColumnAdjuster(jTable, spacing); 
    tca.adjustColumns(); 
end 

的問題是,Matlab的將保持更新表作爲滾動和/或基礎數據的變化,這可以重置寬度(或甚至具有其它副作用如添加更多的空欄等)。如果您研究Matlab使用的自定義表類,您會注意到一個方便的setAutoGrowthTemporarilyDisabled方法。將其設置爲true可讓我們暫時避免這些副作用(似乎需要pause才能生效),但是一旦開始與表/數據交互時,列的大小仍可能會調整。您需要進一步探索此自定義表類,以瞭解如何防止這種情況。

+0

謝謝,涅-msu。我在猜測,沒有什麼神奇的方法可以繞過一個在GUI背後隱藏的編程解決方案。我很快就不會這麼做了(我的時間狀況的實際情況),但知道事實上這種情況很有用。我會稍微等待一個神奇的現成解決方案,如果沒有出現,我會將您的答案標記爲答案。 – user36800