Check if figure tab exists
- Thermo1_Cond1
- Thermo2_Cond2
- Thermo3_Cond3
3 Comments
Hi @MH,
To implement this functionality, you can utilize MATLAB's findobj function to check for existing tabs that contain a specific substring in their names. The following steps outline the approach. Use findobj to search for existing tab objects that match your substring criteria. If the tab exists, select it; if not, create a new tab. Then, load and plot your new dataset in the appropriate tab.
For more information on findobj function, please refer to
https://www.mathworks.com/help/matlab/ref/findobj.html
Here's a sample implementation that demonstrates this logic:
% Example Setup figureHandle = figure('Name', 'Control'); tabGroup = uitabgroup(figureHandle);
% Simulated data import loop (for demonstration) dataSets = {'Thermo1_Cond1', 'Thermo2_Cond2', 'Thermo3_Cond3'}; for i = 1:length(dataSets) % Extract substring (e.g., 'Thermo1') subStr = 'Thermo1'; % You may also parameterize this
% Check for existing tab existingTab = findobj(tabGroup, 'Title', subStr);
if isempty(existingTab) % If it doesn't exist, create a new tab newTab = uitab(tabGroup, 'Title', dataSets{i}); % Here you would add your plotting code for the new data % Example: plot(newTab, ...); disp(['Created new tab: ', dataSets{i}]); else % If it exists, select the existing tab tabGroup.SelectedTab = existingTab; % Load new data and plot % Example: plot(existingTab, ...); disp(['Loaded data into existing tab: ', subStr]); end end
As you can see the code initializes a figure and a tab group. Then, it simulates the data import process. In practice, you would replace the dataSets array with your actual imported data. Afterwards, findobj function looks for tabs within the tabGroup that have a Title matching the substring. If no existing tab is found, it creates a new tab and is set to plot the corresponding data. However, if a tab is found, it selects that tab and plots the new data onto the existing plot.
Hope this answers your question, please let me know if you have any further questions.
Accepted Answer
Hi @MH,
To implement this functionality, you can utilize MATLAB's findobj function to check for existing tabs that contain a specific substring in their names. The following steps outline the approach. Use findobj to search for existing tab objects that match your substring criteria. If the tab exists, select it; if not, create a new tab. Then, load and plot your new dataset in the appropriate tab.
For more information on findobj function, please refer to
https://www.mathworks.com/help/matlab/ref/findobj.html
Here's a sample implementation that demonstrates this logic:
% Example Setup figureHandle = figure('Name', 'Control'); tabGroup = uitabgroup(figureHandle);
% Simulated data import loop (for demonstration) dataSets = {'Thermo1_Cond1', 'Thermo2_Cond2', 'Thermo3_Cond3'}; for i = 1:length(dataSets) % Extract substring (e.g., 'Thermo1') subStr = 'Thermo1'; % You may also parameterize this
% Check for existing tab existingTab = findobj(tabGroup, 'Title', subStr);
if isempty(existingTab) % If it doesn't exist, create a new tab newTab = uitab(tabGroup, 'Title', dataSets{i}); % Here you would add your plotting code for the new data % Example: plot(newTab, ...); disp(['Created new tab: ', dataSets{i}]); else % If it exists, select the existing tab tabGroup.SelectedTab = existingTab; % Load new data and plot % Example: plot(existingTab, ...); disp(['Loaded data into existing tab: ', subStr]); end end
As you can see the code initializes a figure and a tab group. Then, it simulates the data import process. In practice, you would replace the dataSets array with your actual imported data. Afterwards, findobj function looks for tabs within the tabGroup that have a Title matching the substring. If no existing tab is found, it creates a new tab and is set to plot the corresponding data. However, if a tab is found, it selects that tab and plots the new data onto the existing plot.
Hope this answers your question, please let me know if you have any further questions.
5 Comments
More Answers (2)
2 Comments
Hi @MH,
To work around this limitation and effectively manage tabs in a MATLAB GUI, I can leverage the findobj function to search for existing tab objects based on their titles. However, going through documentation, it seems that findobj does not support substring matching directly. So, instead, I can utilize the contains function as you suggest in conjunction with a loop to achieve the desired functionality. Below, I will provide a detailed explanation and a refined code implementation that addresses the concerns raised. So, I started creating a figure and a tab group where the tabs will reside. For demonstration purposes, I will simulate the import of datasets. In a real application, this would involve loading your actual data. Instead of using findobj directly to find a tab by title, I will iterate through the existing tabs and use the contains function to check if any tab title includes the specified substring. If a matching tab is found, I will select it; if not, I will create a new tab and plot the corresponding data. Here is a refined version of the code that incorporates the above logic:
% Example Setup figureHandle = figure('Name', 'Control'); tabGroup = uitabgroup(figureHandle);
% Simulated data import loop (for demonstration) dataSets = {'Thermo1_Cond1', 'Thermo2_Cond2', 'Thermo3_Cond3'};
for i = 1:length(dataSets) % Extract substring (e.g., 'Thermo1') subStr = 'Thermo1'; % This can be parameterized as needed
% Initialize a flag to check if the tab exists tabExists = false;
% Check for existing tabs using contains for j = 1:length(tabGroup.Children) if contains(tabGroup.Children(j).Title, subStr) existingTab = tabGroup.Children(j); tabExists = true; break; % Exit loop if tab is found end end
if ~tabExists % If it doesn't exist, create a new tab newTab = uitab(tabGroup, 'Title', dataSets{i}); % Here you would add your plotting code for the new data % Example: plot(newTab, ...); disp(['Created new tab: ', dataSets{i}]); else % If it exists, select the existing tab tabGroup.SelectedTab = existingTab; % Load new data and plot % Example: plot(existingTab, ...); disp(['Loaded data into existing tab: ', existingTab.Title]); end end
Please see attached.
For more information on ui tab group function, please refer to
So, if you glance through the code, it begins by creating a figure and a tab group to hold the tabs. The dataSets array simulates the datasets that would typically be imported and a loop iterates through the existing tabs in the tabGroup. The contains function checks if the title of any tab includes the specified substring (subStr). If a match is found, the corresponding tab is stored in existingTab, and a flag (tabExists) is set to true. Depending on whether a matching tab was found, the code either creates a new tab or selects the existing one. The appropriate plotting code can be added where indicated. Hope this should help resolve your problem now.
0 Comments
See Also
Categories
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!