3

MATLAB GUIDEコントロールを使用して、GUIでテキストファイルの内容を表示するにはどうすればよいですか?テキストファイルは非常に長い場合もあれば非常に広い場合もあるため、垂直方向と水平方向のスクロールバーを使用できる必要があります。

4

3 に答える 3

9

テキストを表示するには、複数行の編集ボックスが最適な場合があります。例:

%# 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)に設定します。また、テキストの編集を無効にしました (読み取り専用)。

スクリーンショット

于 2011-10-28T17:43:56.217 に答える
1

「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');
于 2011-10-28T11:26:25.587 に答える
0

これが私の解決策です。幸運を

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);
于 2014-11-27T12:17:05.570 に答える