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.
Prashant Kumar answered .
2025-11-20
Seems like you're doing some sort of combination of two distinct things:
% 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
% 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