View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
Add Icons to GUI menus

3.3 | 3 ratings Rate this file 5 Downloads (last 30 days) File Size: 22.7 KB File ID: #44483 Version: 1.4
image thumbnail

Add Icons to GUI menus



25 Nov 2013 (Updated )

Adds icons to the main figure menu of a given GUI

| Watch this File

File Information

Given the handle of a GUI, this function attaches the icons stored in the "UserData" of each menu handle to the figure. As a result, the given GUI is enriched by properly implemented icons, added to the uimenu on the java level.

For the icons, filenames on the path, full qualified file names or java ImageIcon could be given.

Details can be found in the example.


% Attach icon data to the menu handles UserData

set(handles.Menu_File, 'UserData', '') % Also topevel handle could get the icon
set(handles.Menu_File_New, 'UserData', 'File_New.png')
set(handles.Menu_File_Load, 'UserData', 'File_Load.png')
set(handles.Menu_File_Save, 'UserData', 'File_Save.png') % get file on path
set(handles.Menu_File_Exit, 'UserData', 'File_Exit.png')

% Set the icons

Aknowledgment: Some of the ideas used here are based on the great work of Yair Altman ( as presented in and

MATLAB release MATLAB 7.13 (R2011b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (4)
30 Nov 2015 Prem Kumar

05 Nov 2014 Roger GALLOU

Hi Alexander,
Thanks for this work .
I would like to make some changes to the code for its compatibility with R2014b.

a) - I have to change top_level_menu_handle by (which is available for < R2014b) :
top_level_menu_handles = findobj(GUI_handle, {'Type', 'uimenu', 'Parent', GUI_handle});

b) - Then I give my version about majors changes in function Loop_SubMenues (can certainly be improved):
function Loop_SubMenues(JMenu, Menu_Children)
% recursively runs through the menu entries and adds the icon, if exists

if isempty(Menu_Children)

%% take care of seperators
% these change the positions
separator_state = get(Menu_Children, {'Separator'});
separator_state(strcmp(separator_state, 'off')) = {0};
separator_state(strcmp(separator_state, 'on')) = {1};

% sort position in ascending order

children_info = {Menu_Children, cell2mat(get(Menu_Children, 'Position')), cell2mat(separator_state)};
[~, iperm] = sort(children_info{2}, 1);
children_info{1} = children_info{1}(iperm);
children_info{2} = children_info{2}(iperm);
children_info{3} = children_info{3}(iperm);

children_info{3} = cumsum(children_info{3});

for num_entry=1:length(Menu_Children)
% pos_entry_java = children_info(num_entry, 2) + children_info(num_entry, 3) - 1; % java indexing
pos_entry_java = children_info{2}(num_entry) + children_info{3}(num_entry) - 1; % java indexing

try % Pour éviter :

AddIcon(javaObjectEDT(JMenu.getItem(pos_entry_java)), children_info{1}(num_entry))

% Recurse into submenues
Loop_SubMenues(javaObjectEDT(JMenu.getItem(pos_entry_java)), get(children_info{1}(num_entry), 'Children'))

27 Nov 2013 Thierry Dalon

Idea is good. But implementation still contains some bugs. (Example gcf is used instead of input hfig)

Comment only
26 Nov 2013 Dongwon

27 Nov 2013 1.1

Added aknowledgement

27 Nov 2013 1.3

Comment added

02 Dec 2013 1.4

Shortcoming removed as mentioned by Thierry

Contact us