Можно настроить размер и расположение компонентов, а также управлять порядком расположения сгруппированных компонентов, задав определенные значения свойств. В этом разделе объясняется, как использовать эти свойства для получения нужного макета. Здесь также объясняется, как использовать SizeChangedFcn обратный вызов для управления режимом изменения размера пользовательского интерфейса.
Макет пользовательского интерфейса состоит из фигуры и одного или нескольких компонентов, помещаемых внутри фигуры. Точное размещение и определение размеров каждого компонента включает в себя установку определенных свойств и понимание того, как внутренние и внешние границы фигуры соотносятся друг с другом.
Область внутри фигуры, которая содержит компоненты пользовательского интерфейса, называется извлекаемой областью. Область рисования исключает границы фигуры, строку заголовка, строку меню и панели инструментов. Можно управлять расположением и размером извлекаемой области, задав Position свойство фигуры как четырехэлементный вектор строки. Первые два элемента этого вектора определяют местоположение. Последние два элемента определяют размер. По умолчанию рисунок Position значения в пикселях.
Эта команда создает фигуру и задает Position значение. Левый край извлекаемой области находится на расстоянии 258 пикселей от левой стороны экрана. Его нижний край находится на 132 пикселя вверх от нижней части экрана. Его размер составляет 560 пикселей в ширину и 420 пикселей в высоту:
f = figure('Position',[258 132 560 420]);

Можно запросить или изменить внешние границы фигуры с помощью OuterPosition собственность. Область, охватываемая внешними границами фигуры, включает границы фигуры, строку заголовка, строку меню и панели инструментов. Как и Position свойство, OuterPosition - четырехэлементный вектор строки:
f.OuterPosition
ans = 250 124 576 512

Явное изменение Position или OuterPosition приводит к изменению другого свойства. Например, это текущий Position значение f:
f.Position
ans = 258 132 560 420
OuterPosition вызывает Position для изменения:f.OuterPosition = [250 250 490 340]; f.Position
ans = 258 258 474 248
Другие компоненты пользовательского интерфейса, такие как UIControl, Table, и Panel объекты имеют Position , которое можно использовать для задания их местоположения и размера.
Единицы измерения по умолчанию, связанные с Position свойство зависит от размещаемого компонента. Однако можно изменить Units свойство для размещения пользовательского интерфейса в выбранных единицах. Существует шесть различных единиц измерения: дюймы, сантиметры, нормированные, точки, пикселы и символы.
Всегда указывать Units прежде Position для наиболее предсказуемых результатов.
f = figure('Units','inches','Position',[4 3 6 5]);
Выбор единиц может повлиять на внешний вид и изменение размеров пользовательского интерфейса:
Если требуется, чтобы компоненты пользовательского интерфейса масштабировались пропорционально фигуре при изменении размера фигуры, установите Units свойства компонентов для 'normalized'.
Компоненты пользовательского интерфейса не масштабируются пропорционально внутри фигуры, когда Units свойство имеет значение 'inches', 'centimeters', 'points', 'pixels', или 'characters'.
Если вы разрабатываете кроссплатформенный пользовательский интерфейс, то установите Units свойство для 'points' или 'characters' для согласования компоновки на всех платформах.
Вот код для простого приложения, содержащего оси и кнопку. Чтобы увидеть, как он работает, скопируйте и вставьте этот код в редактор и запустите его.
function myui % Add the UI components hs = addcomponents; % Make figure visible after adding components hs.fig.Visible = 'on'; function hs = addcomponents % add components, save handles in a struct hs.fig = figure('Visible','off',... 'Resize','off',... 'Tag','fig'); hs.btn = uicontrol(hs.fig,'Position',[10 340 70 30],... 'String','Plot Sine',... 'Tag','button',... 'Callback',@plotsine); hs.ax = axes('Parent',hs.fig,... 'Position',[0.20 0.13 0.71 0.75],... 'Tag','ax'); end function plotsine(hObject,event) theta = 0:pi/64:6*pi; y = sin(theta); plot(hs.ax,theta,y); end end
Основная функция, myui, вызывает addcomponents функция. addcomponents функция возвращает структуру, hs, содержащий дескрипторы для всех компонентов пользовательского интерфейса.
addcomponents функция создает фигуру, оси и кнопку, каждая с определенными Position значения.
Обратите внимание, что Resize свойство фигуры 'off'. Это значение отключает возможность изменения размера фигуры.
Обратите внимание, что Visible свойство фигуры 'off' внутри addcomponents функция. Значение изменяется на 'on' после addcomponents возвращает вызывающую функцию. Это приводит к задержке отображения рисунка до тех пор, пока MATLAB ® не добавит все компоненты. Таким образом, результирующий пользовательский интерфейс имеет чистый внешний вид при запуске.
plotsine функция отображает синусоидальную функцию внутри осей, когда пользователь нажимает кнопку.

Чтобы создать пользовательский интерфейс с изменяемым размером и управлять макетом при изменении размера окна, задайте параметры рисунка. SizeChangedFcn является дескриптором функции обратного вызова. Кодирование функции обратного вызова для управления макетом при изменении размера окна.
Если пользовательский интерфейс имеет другой контейнер, например панель или группу кнопок, можно управлять компоновкой дочерних компонентов контейнера в отдельной функции обратного вызова, назначенной SizeChangedFcn собственность.
SizeChangedFcn обратный вызов выполняется только при следующих обстоятельствах:
Контейнер становится видимым впервые.
Контейнер виден, в то время как его извлекаемая область изменяется.
Контейнер становится видимым в первый раз после того, как изменяется его область извлечения. Эта ситуация возникает, когда извлекаемая область изменяется, когда контейнер невидим и становится видимым позже.
Примечание
Обычно извлекаемая область изменяется одновременно с изменением внешних границ. Однако добавление или удаление строк меню или панелей инструментов в фигуру приводит к изменению внешних границ, в то время как область извлечения остается постоянной. Следовательно, SizeChangedFcn Обратный вызов не выполняется при добавлении или удалении строк меню или панелей инструментов.
Это приложение является редактируемой версией простого приложения, определенного в примере простого макета. Этот код содержит фигуру SizeChangedFcn вызываемый обратный вызов resizeui. resizeui функция вычисляет новые Position значения для кнопки и осей при изменении размера окна пользователем. Когда пользователь изменяет размер окна, кнопка становится неподвижной. Оси масштабируются вместе с рисунком.
function myui % Add the UI components hs = addcomponents; % Make figure visible after adding components hs.fig.Visible = 'on'; function hs = addcomponents % Add components, save handles in a struct hs.fig = figure('Visible','off',... 'Tag','fig',... 'SizeChangedFcn',@resizeui); hs.btn = uicontrol(hs.fig,'String',... 'Plot Sine',... 'Callback',@plotsine,... 'Tag','button'); hs.ax = axes('Parent',hs.fig,... 'Units','pixels',... 'Tag','ax'); end function plotsine(hObject,event) theta = 0:pi/64:6*pi; y = sin(theta); plot(hs.ax,theta,y); end function resizeui(hObject,event) % Get figure width and height figwidth = hs.fig.Position(3); figheight = hs.fig.Position(4); % Set button position bheight = 30; bwidth = 70; bbottomedge = figheight - bheight - 50; bleftedge = 10; hs.btn.Position = [bleftedge bbottomedge bwidth bheight]; % Set axes position axheight = .75*figheight; axbottomedge = max(0,figheight - axheight - 30); axleftedge = bleftedge + bwidth + 30; axwidth = max(0,figwidth - axleftedge - 50); hs.ax.Position = [axleftedge axbottomedge axwidth axheight]; end end
resizeui функция устанавливает местоположение и размер кнопки и осей при каждом изменении размера окна пользователем:
Высота, ширина и левая кромка кнопки остаются неизменными при изменении размеров окна.
Нижний край кнопки, bbottomedge, обеспечивает 50 пикселов пространства между верхней частью фигуры и верхней частью кнопки.
Значение высоты осей, axheight, составляет 75% от доступной высоты на рисунке.
Значение нижней кромки осей, axbottomedge, обеспечивает 30 пикселов пространства между верхней частью фигуры и верхней частью осей. В этом расчете max функция ограничивает это значение неотрицательными значениями.
Значение ширины осей, axwidth, обеспечивает 50 пикселов пространства между правой стороной осей и правым краем фигуры. В этом расчете max функция ограничивает это значение неотрицательными значениями.
Обратите внимание, что весь код компоновки находится внутри resizeui функция. Рекомендуется поместить весь код формата в SizeChangedFcn обратный вызов для обеспечения наиболее точных результатов.
Кроме того, важно отложить отображение всего окна пользовательского интерфейса до тех пор, пока не появятся все переменные, которые SizeChangedFcn определены виды использования обратного вызова. Это может предотвратить SizeChangedFcn обратный вызов при возврате ошибки. Для задержки отображения окна установите Visible свойство фигуры для 'off'. После определения всех переменных, SizeChangedFcn использует обратный вызов, установите Visible свойство для 'on'.
Порядок расположения компонентов в пользовательском интерфейсе по умолчанию - «спереди назад» или «стопка» - выглядит следующим образом:
Оси и другие графические объекты отображаются за другими компонентами. Перед ними появляются компоненты пользовательского интерфейса и контейнеры (панели, группы кнопок и вкладки).
Компоненты пользовательского интерфейса и контейнеры отображаются в порядке их создания. Новые компоненты появляются перед существующими компонентами.
Порядок укладки можно изменить в любое время, но есть некоторые ограничения. Оси и другие графические объекты могут располагаться в любом порядке относительно друг друга. Однако оси и другие графические объекты не могут располагаться перед компонентами и контейнерами пользовательского интерфейса. Они всегда появляются за компонентами пользовательского интерфейса и контейнерами.
Можно обойти это ограничение, сгруппировав графические объекты в отдельные контейнеры. Тогда вы можете сложить эти контейнеры в любой порядок. Чтобы сгруппировать графический объект в контейнер, задайте его Parent свойство, которое должно быть этим контейнером. Например, можно сгруппировать оси в панель, установив Parent свойство осей, которые должны быть панелью.
Children свойство Panel, ButtonGroup, или Tab объект перечисляет дочерние объекты внутри контейнера в соответствии с порядком их укладки.