Created tabbed GUI in GUIDE
40 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Justin Solomon
el 26 de Mayo de 2015
Comentada: beginner94
el 22 de Oct. de 2019
Is there any way to lay out and design a GUI with tabs using GUIDE? I don't see any place to insert uitabgroup panels with GUIDE. I fear I may have to go back to basics and program everything from scratch. Yikes!
2 comentarios
Respuesta aceptada
Image Analyst
el 27 de Mayo de 2015
No, GUIDE doesn't do that now, unfortunately. Hopefully in the next release, because you can do it from scratch, in code, like you said. However if you have dozens of other widgets on your UI, creating them all would be a major pain. One workaround is to use buttons as tabs and put all the controls that you would have placed on a tab into a panel. Put the buttons into a button group so that when you press one, it "unpresses" the others and makes the appropriate panel visible and the others invisible. Kind of kludgy but it works.
0 comentarios
Más respuestas (4)
Charles
el 29 de Mayo de 2015
Editada: Charles
el 29 de Mayo de 2015
I have discovered the same issue. I primarily do my GUI's with Guide, and would like to continue. Here is my workaround:
- Make a GUIDE figure large enough to hold all of your tabs side-by-side
- Create panels side-by-side on the GUIDE page. Tag them P1, P2, etc. Make the panels all the same size, set the border to "none", and clear the title (if desired)
- Place panel 1 where you want all the panels to be. Be sure to leave room on the left if you are using left tabs. the location of the rest of the panels does not matter. Make sure panel 1 is the same size or larger than all of your other panels. The remaining panels should leave some space away form panel 1 so that you will be able to grab and drag the figure corner when editing later.
- Lay out all of your buttons, text boxes, and other features within each panel.
- When done with the layout, shrink the overall window in GUIDE to just show panel 1. the other panels continue to exist, off the page.
- Edit the corresponding .m file, OpeningFCN, adding a version of the following code:
%Create tab group
handles.tgroup = uitabgroup('Parent', handles.figure1,'TabLocation', 'left');
handles.tab1 = uitab('Parent', handles.tgroup, 'Title', 'My Tab Label 1');
handles.tab2 = uitab('Parent', handles.tgroup, 'Title', 'My Tab Label 2');
handles.tab3 = uitab('Parent', handles.tgroup, 'Title', 'My Tab Label 3');
%Place panels into each tab
set(handles.P1,'Parent',handles.tab1)
set(handles.P2,'Parent',handles.tab2)
set(handles.P3,'Parent',handles.tab3)
%Reposition each panel to same location as panel 1
set(handles.P2,'position',get(handles.P1,'position'));
set(handles.P3,'position',get(handles.P1,'position'));
Now all of the controls end up on the correct tabs within hidden panels. To edit panel content, in GUIDE expand the figure to see all the panels, edit, then shrink again.
This approach allows the use of GUIDE and has minimal programming to arrange your GUIDE elements into the tabs.
Hope this helps!
Chuck
17 comentarios
beginner94
el 22 de Oct. de 2019
Thanks a lot for this workaround!
Do you also know how to resize of the overall window when another tab is opened?
Walter Roberson
el 26 de Mayo de 2015
It appears that GUIDE does not offer a layout service for tab groups. However, see http://www.mathworks.com/matlabcentral/fileexchange/?term=uitab
0 comentarios
Ka Mirul
el 25 de Nov. de 2018
You can use several button to switch panel dispaly to create multi tab GUI.
0 comentarios
egdeluca
el 25 de Sept. de 2019
Good morning,
I'm trying to create a JTabGroup with delete icon but I have some problems to java handle object. From the following example:
% Prepare a tab-group consisting of two tabs
hTabGroup = uitabgroup;
tab1 = uitab(hTabGroup, 'title','Panel 1');
a = axes('parent', tab1); surf(peaks);
tab2 = uitab(hTabGroup, 'title','Panel 2');
uicontrol(tab2, 'String','Close', 'Callback','close(gcbf)');
% Get the underlying Java reference (use hidden property)
jTabGroup = getappdata(handle(hTabGroup),'JTabbedPane');
% First let's load the close icon
jarFile = fullfile(matlabroot,'/java/jar/mwt.jar');
iconsFolder = '/com/mathworks/mwt/resources/';
iconURI = ['jar:file:/' jarFile '!' iconsFolder 'closebox.gif'];
icon = javax.swing.ImageIcon(java.net.URL(iconURI));
% Now let's prepare the close button: icon, size and callback
jCloseButton = handle(javax.swing.JButton,'CallbackProperties');
jCloseButton.setIcon(icon);
jCloseButton.setPreferredSize(java.awt.Dimension(15,15));
jCloseButton.setMaximumSize(java.awt.Dimension(15,15));
jCloseButton.setSize(java.awt.Dimension(15,15));
set(jCloseButton, 'ActionPerformedCallback',@(h,e)delete(tab2));
% Now let's prepare a tab panel with our label and close button
jPanel = javax.swing.JPanel; % default layout = FlowLayout
set(jPanel.getLayout, 'Hgap',0, 'Vgap',0); % default gap = 5px
jLabel = javax.swing.JLabel('Tab #2');
jPanel.add(jLabel);
jPanel.add(jCloseButton);
% Now attach this tab panel as the tab-group's 2nd component
jTabGroup.setTabComponentAt(1,jPanel); % Tab #1 = second tab
The handle of JTabGroup variable is empty, then it doesn't work. The same code works in R2014a version. Can anyone tell me why?
Where is the mistake?
Thank you
Egidio
0 comentarios
Ver también
Categorías
Más información sobre Migrate GUIDE Apps en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!