1

我已经在Matlab Answers上询问过这个问题,但在那里没有得到回复,所以我在这里尝试一下。

我有一些数字想在 UITable 中显示。由于我需要值的特定格式(逗号后三位,无科学记数法),我将值转换为字符串。问题是这些字符串默认是左对齐的,看起来不是很好。

在 GUIDE 中使用 UITable 时,我能够用前导空格填充字符串以使它们正确对齐,如下所示

data = {'1532.000'; '   5.543'; '  26.457'};

使用单空格字体,值在表中显示如下:

1532.000
   5.543
  26.457

目前我正在考虑切换到 App Designer。我使用的是相同的空格填充字符串,但这里的 uitable 似乎将它们剥离。结果如下所示:

1532.000
5.543
26.457

有没有办法uitable在 App Designer 中像在 GUIDE 中一样保留空间?当然,直接右对齐字符串而不需要填充会更好,但据我所知,这是不可能的。

以防万一:我使用的是 Matlab R2016b。

编辑:

生成和填充 UITable 的最小示例。这是一个简单的 AppDesigner GUI,我只添加了一个表格和一个按钮(没有修改任何属性)。按钮的点击回调用于将数据添加到表格中。

classdef test < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        UIFigure  matlab.ui.Figure
        UITable   matlab.ui.control.Table
        Button    matlab.ui.control.Button
    end

    methods (Access = private)

        % Button pushed function: Button
        function ButtonPushed(app, event)
            data = {'1532.000'; '   5.543'; '  26.457'};
            app.UITable.Data = data;
        end
    end

    % App initialization and construction
    methods (Access = private)

        % Create UIFigure and components
        function createComponents(app)

            % Create UIFigure
            app.UIFigure = uifigure;
            app.UIFigure.Position = [100 100 640 480];
            app.UIFigure.Name = 'UI Figure';
            setAutoResize(app, app.UIFigure, true)

            % Create UITable
            app.UITable = uitable(app.UIFigure);
            app.UITable.ColumnName = {'Column 1'; 'Column 2'; 'Column 3'; 'Column 4'};
            app.UITable.RowName = {};
            app.UITable.Position = [127 180 302 185];

            % Create Button
            app.Button = uibutton(app.UIFigure, 'push');
            app.Button.ButtonPushedFcn = createCallbackFcn(app, @ButtonPushed, true);
            app.Button.Position = [220 104 100 22];
        end
    end

    methods (Access = public)

        % Construct app
        function app = test()

            % Create and configure components
            createComponents(app)

            % Register the app with App Designer
            registerApp(app, app.UIFigure)

            if nargout == 0
                clear app
            end
        end

        % Code that executes before app deletion
        function delete(app)

            % Delete UIFigure when app is deleted
            delete(app.UIFigure)
        end
    end
end

按下按钮后,表格如下所示:

在此处输入图像描述

请注意,AppDesigner 只允许我修改ButtonPushed函数内部的代码。

4

1 回答 1

3

经过一段时间的调查,我发现 a 出现“特殊”行为的原因uitable是因为它实际上是一个 Java 对象!(我不知道他们是如何做到这一点的,也不知道为什么)。在任何情况下,可以通过在脚本中插入一行来右对齐数据:

data = {'1532.000'; '   5.543'; '  26.457'};        
app.UITable.Data = data;
setColumnFormat(java(app.UITable),{'numeric'}); % < Add this

如果您想以这种方式右对齐不止一列,只需{'numeric'}根据需要复制多次:

setColumnFormat(java(app.UITable), repmat( {'numeric'}, 1, size(data,2) ) );

上面的样式命令也可以使用稍短的符号(感谢@luator指出这一点):

app.UITable.ColumnFormat = {'numeric'};
app.UITable.ColumnFormat = repmat( {'numeric'}, 1, size(data,2) );

结果:

示范

如果我正确理解了 Yair 的博客,您可以通过查找“JIDE Table”或SortableTable.

于 2017-03-09T15:56:24.680 回答