2014-08-28 43 views
4

我正在Matlab中工作。當用戶點擊樹列表中的文件名時,我想要在給定的面板中逐個顯示圖像。誰能幫幫我嗎?在UITree Matlab中單擊節點時在面板中顯示列出的圖像?

enter image description here

代碼樹:

src = strcat(pwd,'\Result\'); 
[mtree, container] = uitree('v0', 'Root',src,۔۔۔ 
'Position',[10 10 290 370],'Parent', imageListPanel2); % Parent is ignored 
set(container, 'Parent', imageListPanel2); % fix the uitree Parent 

函數來顯示在面板圖片:

function refreshDisplay(varargin) 
    imgDisplayed = imshow(tmp,'parent',workingAx); 
end %refreshDisplay 

我只需要知道如何從我的樹調用函數refreshDisplay()。再次記住我想從樹元素(文件)中調用函數,而不是從節點(子目錄)中調用。

問候。

+0

請註明你被卡住究竟在何處? – georg 2014-08-29 08:53:19

+0

我想爲樹元素實現鼠標按鍵監聽器。例如,在我上面的圖形用戶界面中,當用戶右鍵單擊aaa(1).jpg時,它會執行一些操作,就像我在右側面板中顯示的那樣。 – 2014-08-29 10:51:31

+0

但問題是什麼?這裏沒有提供關於你的代碼的細節。如何編碼你的treeview?問題是,如何訪問樹元素?或者如何實現'ButtonDownFcn'回調或...? – georg 2014-08-29 11:37:38

回答

2

請注意,樹中的所有內容都是節點,文件夾和圖像。您需要在選擇回調中執行檢查以測試選定節點是否爲文件夾。

引用UndocumentedMatlab

當前選擇的(多個)節點可使用mtree.getSelectedNodes被訪問。節點選擇 回調往往需要當前選擇的行的知識:

%// Tree set up 
mtree = uitree(..., 'SelectionChangeFcn',@mySelectFcn); 
set(mtree, 'SelectionChangeFcn',@mySelectFcn); % an alternative 

%// The tree-node selection callback 
function nodes = mySelectFcn(tree, value) 
    selectedNodes = tree.getSelectedNodes; 
    %// Use this to see which information is available about the node: 
    %// methods(selectedNodes(1),'-full') 
    %// And the node array: 
    %// methods(selectedNodes,'-full') 
    if ~isempty(selectedNodes) || max(selectedNodes.size)>1 
     %// Obtain path from selected node; Source: link1 below 
     nodePath = selectedNodes(1).getPath.cell; 
     subPathStrs = cellfun(@(p) [p.getName.char,filesep],nodePath,'un',0); 
     pathStr = strrep([subPathStrs{:}], [filesep,filesep],filesep); 
     %// Also, don't forget a drive letter here^if required 
     if ~isdir(pathStr) %// check that the selection isn't a directory 
      %// this is where you need to call your refresh function 
     end 
    end 
end %// mySelectFcn 

link1


你可以得到一些其他的想法在this answer,它展示瞭如何實現鼠標跟蹤回調,在如果您希望刷新在鼠標上執行...

+0

謝謝你的回答先生。但仍然需要一些東西,因爲我在我的問題中提到我需要在面板中顯示或顯示圖像,所以我需要文件名。你可以請指導我如何獲得被點擊的文件名。再次感謝。 – 2014-09-02 12:19:39

+0

你好,請加入我[聊天](http://chat.stackoverflow.com/rooms/60449/25620190#)我會盡力幫助你從那裏。 – 2014-09-02 12:26:57

+0

謝謝先生。它的工作現在。 Jazakallah – 2014-09-03 07:43:38

5

下面是一個快速但完整的示例。代碼被註釋掉,易於遵循:

function MyImageViewer 
    % prepare GUI 
    hFig = figure('Menubar','none', 'Name','Image Viewer'); 
    hPan(1) = uipanel('Parent',hFig, 'Position',[0 0 0.3 1]); 
    hPan(2) = uipanel('Parent',hFig, 'Position',[0.3 0 0.7 1]); 

    ax = axes('Parent',hPan(2), 'Units','normalized', 'Position',[0 0 1 1]); 
    axis(ax, 'off', 'image') 

    [jtree,htree] = uitree('v0', 'Parent',hFig, ... 
     'Root','C:\Users\Amro\Pictures\', 'SelectionChangeFcn',@changeFcn); 
    set(htree, 'Parent',hPan(1), 'Units','normalized', 'Position',[0 0 1 1]); 
    jtree.expand(jtree.getRoot); % expand root node 

    % list of supported image extensions 
    fmt = imformats; 
    imgExt = lower([fmt.ext]); 

    function changeFcn(~,~) 
     % get selected node 
     nodes = jtree.getSelectedNodes; 
     if isempty(nodes), return; end 
     n = nodes(1); 

     % only consider a leaf node (skip folders) 
     if ~n.isLeaf, return; end 

     % get complete node path (absolute filename) 
     p = arrayfun(@(nd) char(nd.getName), n.getPath, 'Uniform',false); 
     p = strjoin(p(:).', filesep); 

     % check for supported image types, and show image 
     [~,~,ext] = fileparts(p); 
     if any(strcmpi(ext(2:end),imgExt)) 
      imshow(p, 'Parent',ax) 
     end 
    end 
end 

image_viewer

+0

謝謝先生。上帝祝福你。 – 2014-09-03 07:45:24

相關問題