Question
I am attempting to declutter my MATLAB app code by separating some of the initialization into separate .m files. For this I have set up various files for each type of component (e.g. a file for buttons, graph, etc.). I am attempting to access a function in my master initialize file from the file for buttons. My code goes as follows in the buttons .m file goes as follow: classdef buttons < handle methods %initializes the UI function buttonCreate(app) %Create file load 1 app.fileload1 = uibutton(app.gridLayout, 'push'); app.fileload1.FontSize = 36; app.fileload1.Layout.Row = [8 9]; app.fileload1.Layout.Column = 1; app.fileload1.Text = 'Load 1'; %proceeds to create the rest of the buttons end end end Now I attempt to access the buttonCreate() function in my master initialize file initialize.m: classdef initialize < handle properties fig gridLayout axes fileload1 end methods %initializes the UI function init(app) %create canvas import buttons.*; fig = uifigure; fig.Position = [100 100 1920 1080]; movegui(fig,'center'); fig.Name = "Audio Editor"; %Create grid layout gridLayout = uigridlayout(fig); gridLayout.ColumnWidth = {'1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x'}; gridLayout.RowHeight = {'1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x'}; buttonCreate(app); end end %code for calling and deleting methods %calls code to create canvas upon app start function app = initialize init(app) end %removes the app and deletes app.fig function delete(app) delete(app.fig); end end end Error in initialize/init (line 41) buttonCreate(app); ^^^^^^^^^^^^^^^^^^ Error in initialize (line 54) init(app) ^^^^^^^^^ This resulted in the UIFigure still being created, but with no button and the terminal giving the error given above.
Related Questions
Expert Answer
Prashant Kumar
PhD Expert
Answered Nov 20, 2025
Seems like you're doing some sort of combination of two distinct things:
- Use a simple function, which can be in its own .m file or one of the methods of your main class:
% in your initialise class constructor you still have buttonCreate(app);
% In buttonCreate.m
function buttonCreate(app)
% Create file load 1
app.fileload1 = uibutton(app.gridLayout, 'push');
app.fileload1.FontSize = 36;
app.fileload1.Layout.Row = [8 9];
% ...
end
- Use a class to hold references to all of your buttons, in which case the objects you create would be properties of that class, rather than the main app object:
% in your initialise class constructor you create a buttons % object and assign it to the buttons property. % The buttons don't need to know anything about the app, just % the target grid layout to parent the buttons app.buttons = buttons( app.gridLayout );
% In buttons.m
classdef buttons < handle
properties
fileload1
end
methods
function obj = buttons( grid )
% Create file load 1
obj.fileload1 = uibutton(grid, 'push');
obj.fileload1.FontSize = 36;
obj.fileload1.Layout.Row = [8 9];
% ...
end
end
end
Have a different question? Ask here