Как обрезать начало текста, а не конец в MATLAB uilabel - PullRequest
0 голосов
/ 07 апреля 2020

Я создаю GUI с помощью App Designer в MATLAB (2019b). Один из аспектов этого - позволить пользователю загрузить файл, а затем отобразить имя файла, который был загружен. Когда отображаемый текст длиннее, чем размер uilabel, по умолчанию используется обрезание конца и добавление многоточия («...»). Я хотел бы обрезать от front и поместить туда многоточие, так как для пользователя более важно видеть имя файла, а не путь к файлу. Вот пример того, как я хочу, чтобы он выглядел.

sample app image

Каков наилучший способ добиться этого? Прямо сейчас У меня есть хак, который измеряет ширину uilabel, а затем приближает, сколько символов будет соответствовать и обрезает текст на основе этого. Это, кажется, не ведет себя последовательно, хотя, вероятно, делать это пропорционально, а не моноширинно. Кроме того, поскольку ширина uilabel измеряется в пикселях, я беспокоюсь, что она не будет работать согласованно при других разрешениях монитора и средах отображения. Есть ли лучший способ, чем то, что я сейчас делаю, или способ улучшить мой метод, чтобы сделать его более надежным?

Пример кода:

classdef sampleApp < matlab.apps.AppBase

% Properties that correspond to app components
properties (Access = public)
    UIFigure               matlab.ui.Figure
    SelectaFileButton      matlab.ui.control.Button
    defaultFilename        matlab.ui.control.Label
    DefaultBehaviorLabel   matlab.ui.control.Label
    ModifiedBehaviorLabel  matlab.ui.control.Label
    modifiedFilename       matlab.ui.control.Label
end

% Callbacks that handle component events
methods (Access = private)

    % Button pushed function: SelectaFileButton
    function SelectaFileButtonPushed(app, event)
        [filename,pathname] = uigetfile('Select a filename to display');
        filestr = fullfile(pathname,filename);

        % This sets the text the normal way
        app.defaultFilename.Text = filestr;
        app.defaultFilename.Tooltip = filestr;

        % This measures the width of the text field and attempts to fit
        % the text to the field
        pos = app.modifiedFilename.Position;
        nchars = floor(0.165*pos(3))-3; % The 0.165 was found through trial and error
        if(length(filestr)>nchars+3)
            shortText = ['...' filestr(end-nchars+1:end)];
        else
            shortText = filestr;
        end   
        app.modifiedFilename.Text = shortText;
        app.modifiedFilename.Tooltip = filestr;
    end
end

% Component initialization
methods (Access = private)

    % Create UIFigure and components
    function createComponents(app)

        % Create UIFigure and hide until all components are created
        app.UIFigure = uifigure('Visible', 'off');
        app.UIFigure.Position = [100 100 297 111];
        app.UIFigure.Name = 'UI Figure';

        % Create SelectaFileButton
        app.SelectaFileButton = uibutton(app.UIFigure, 'push');
        app.SelectaFileButton.ButtonPushedFcn = createCallbackFcn(app, @SelectaFileButtonPushed, true);
        app.SelectaFileButton.Position = [13 68 160 22];
        app.SelectaFileButton.Text = 'Select a File';

        % Create defaultFilename
        app.defaultFilename = uilabel(app.UIFigure);
        app.defaultFilename.Position = [118 39 133 22];
        app.defaultFilename.Text = 'Filename';

        % Create modifiedFilename
        app.modifiedFilename = uilabel(app.UIFigure);
        app.modifiedFilename.Position = [118 19 143 22];
        app.modifiedFilename.Text = 'Filename';

        % Create DefaultBehaviorLabel
        app.DefaultBehaviorLabel = uilabel(app.UIFigure);
        app.DefaultBehaviorLabel.HorizontalAlignment = 'right';
        app.DefaultBehaviorLabel.Position = [-2 40 110 22];
        app.DefaultBehaviorLabel.Text = 'Default Behavior:';

        % Create ModifiedBehaviorLabel
        app.ModifiedBehaviorLabel = uilabel(app.UIFigure);
        app.ModifiedBehaviorLabel.HorizontalAlignment = 'right';
        app.ModifiedBehaviorLabel.Position = [-2 20 110 22];
        app.ModifiedBehaviorLabel.Text = 'Modified Behavior:';

        % Show the figure after all components are created
        app.UIFigure.Visible = 'on';
    end
end

% App creation and deletion
methods (Access = public)

    % Construct app
    function app = sampleApp

        % Create UIFigure and 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

1 Ответ

0 голосов
/ 07 апреля 2020

Эллипсы, вероятно, добавляются в системные API (Java), которые могут быть не обязательно доступны для Matlab. Я предлагаю вам показать имя файла только в метке, извлечь путь, используя части файла, и отобразить его как TooltipString (поддерживается в R2018) метки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...