I am learning Matlab GUI programming. I have written the following basic program to test ListBox GUI control.
The following program loads several image-files in the memory and are displayed in an Axes-GUI control according to the selection of the ListBox by mouse-clicking.
function varargout = ListBox__Test(varargin) % Begin initialization code - DO NOT EDIT
gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @ListBox__Test_OpeningFcn, ... 'gui_OutputFcn', @ListBox__Test_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT
% --- Executes just before ListBox__Test is made visible.
function ListBox__Test_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; image_name_cell_array = {'gif1.gif', 'jpg1.jpg', 'png1.png', 'png2.png'}; handles.image_name_cell_array = image_name_cell_array; handles.image_cell_array = {imread(image_name_cell_array{1}), ... imread(image_name_cell_array{2}), ... imread(image_name_cell_array{3}), ... imread(image_name_cell_array{4})}; set(handles.listbox1,'String',image_name_cell_array); guidata(hObject, handles);% --- Outputs from this function are returned to the command line.
function varargout = ListBox__Test_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;% --- Executes on selection change in listbox1.
function listbox1_Callback(hObject, eventdata, handles) selected_index = get(hObject,'Value');% selected index
I = handles.image_cell_array{selected_index}; % obtain selected item
axes(handles.axes1); image(I);% --- Executes during object creation, after setting all properties.
function listbox1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
Is this the proper way to do what I am trying to accomplish? Or, Is there any better way to do this?
Best Answer