在Matlab变量编辑器

时间:2016-07-02 17:46:36

标签: matlab

我经常使用openvar(' myArrayName')来浏览我的数据。但是,我被Excel能够立刻缩小所有列的能力,让我看到了大量的数据。使用有限的桌面空间是非常令人窒息的,我必须同时查看这么少的列。手动调整每列不是一个好的解决方案,因为我经常打开变量,而且它们通常有很多列。有没有办法以批量方式缩小列?

1 个答案:

答案 0 :(得分:1)

这不是一个完美的解决方案,但可以帮助您入门。基本想法是先get a handle to underlying java table,然后调整所有列的大小,例如按照建议here。您可以下载TableColumnAdjuster java类,将其打包到jar中并使用javaclasspath加载。在使用findjobj搜索java句柄时,请注意表类将取决于您尝试显示的变量的类型(某些示例here),因此我们需要找到正确的句柄。 / p>

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似乎需要它才能生效),但是一旦开始与表/数据交互,列仍然可以调整大小。您需要进一步探索此自定义表类,以了解如何防止这种情况。