【问题标题】:What is the best way to display a large text file in MATLAB GUIDE?在 MATLAB GUIDE 中显示大型文本文件的最佳方法是什么?
【发布时间】:2011-10-26 23:51:07
【问题描述】:

如何使用 MATLAB GUIDE 控件在 GUI 中显示文本文件的内容?文本文件可能很长或很宽,因此它应该具有垂直和水平滚动条的能力。

【问题讨论】:

    标签: user-interface matlab matlab-guide


    【解决方案1】:

    多行编辑框可能是显示文本的最佳选择。示例:

    %# read text file lines as cell array of strings
    fid = fopen( fullfile(matlabroot,'license.txt') );
    str = textscan(fid, '%s', 'Delimiter','\n'); str = str{1};
    fclose(fid);
    
    %# GUI with multi-line editbox
    hFig = figure('Menubar','none', 'Toolbar','none');
    hPan = uipanel(hFig, 'Title','Display window', ...
        'Units','normalized', 'Position',[0.05 0.05 0.9 0.9]);
    hEdit = uicontrol(hPan, 'Style','edit', 'FontSize',9, ...
        'Min',0, 'Max',2, 'HorizontalAlignment','left', ...
        'Units','normalized', 'Position',[0 0 1 1], ...
        'String',str);
    
    %# enable horizontal scrolling
    jEdit = findjobj(hEdit);
    jEditbox = jEdit.getViewport().getComponent(0);
    jEditbox.setWrapping(false);                %# turn off word-wrapping
    jEditbox.setEditable(false);                %# non-editable
    set(jEdit,'HorizontalScrollBarPolicy',30);  %# HORIZONTAL_SCROLLBAR_AS_NEEDED
    
    %# maintain horizontal scrollbar policy which reverts back on component resize 
    hjEdit = handle(jEdit,'CallbackProperties');
    set(hjEdit, 'ComponentResizedCallback',...
        'set(gcbo,''HorizontalScrollBarPolicy'',30)')
    

    要启用水平滚动,我们必须获得嵌入式 JScrollPane java 组件的句柄。我正在使用出色的FINDJOBJ 功能。然后我们将HorizontalScrollBarPolicy 属性设置为javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED (= 30),如post 中所述。我还禁用了文本的编辑(只读)。

    【讨论】:

    • 感谢您的回答。我认为您的解决方案更好。
    • @jpeji:在我看到你添加的代码之前,我并不清楚你在原始问题中问的是什么......我猜源代码也可以“值 1000 字”:)
    【解决方案2】:

    这是我对名为“textfile.txt”的通用文本文件的解决方案:

        f = figure('menu','none','toolbar','none');
        fid = fopen('textfile.txt');
        ph = uipanel(f,'Units','normalized','position',[0.4 0.3 0.5 0.5],'title',...
            'Display window');
        lbh = uicontrol(ph,'style','listbox','Units','normalized','position',...
            [0 0 1 1],'FontSize',9);
    
        indic = 1;
        while 1
             tline = fgetl(fid);
             if ~ischar(tline), 
                 break
             end
             strings{indic}=tline; 
             indic = indic + 1;
        end
        fclose(fid);
        set(lbh,'string',strings);
        set(lbh,'Value',1);
        set(lbh,'Selected','on');
    

    【讨论】:

      【解决方案3】:

      这是我的解决方案。祝你好运

      fid = fopen(filename);
      str = textscan(fid, '%s', 'Delimiter','\n'); str = str{1};
      fclose(fid);
      f=figure;
      hPan = uipanel(f,'Units','normalized');
      uicontrol(hPan, 'Style','listbox', ...
      'HorizontalAlignment','left', ...
      'Units','normalized', 'Position',[0 0 1 1], ...
      'String',str);
      

      【讨论】:

      • 如果添加一些解释呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多