Type Parameters:
T - The type of panel to be used for this component's tabs. Just use ITab if you have no special needs here.
All Implemented Interfaces:
Serializable, Iterable<Component>, IEventSink, IEventSource, IFeedbackContributor, IConverterLocator, IMetadataContext<Serializable,Component>, IQueueRegion, IHeaderContributor, IRequestableComponent, org.apache.wicket.util.IHierarchical<Component>, org.apache.wicket.util.io.IClusterable
Direct Known Subclasses:
AjaxTabbedPanel

public class TabbedPanel<T extends ITab> extends Panel
TabbedPanel component represents a panel with tabs that are used to switch between different content panels inside the TabbedPanel panel.

Note: When the currently selected tab is replaced by changing the underlying list of tabs, the change is not picked up unless a call is made to setSelectedTab(int).

Example:

 List tabs=new ArrayList();
 tabs.add(new AbstractTab(new Model<String>("first tab")) {
   public Panel getPanel(String panelId)
   {
     return new TabPanel1(panelId);
   }
 });
 
 tabs.add(new AbstractTab(new Model<String>("second tab")) {
   public Panel getPanel(String panelId)
   {
     return new TabPanel2(panelId);
   }
 });
 
 add(new TabbedPanel("tabs", tabs));
 
 <span wicket:id="tabs" class="tabpanel">[tabbed panel will be here]</span>
 

For a complete example see the component references in wicket-examples project

Author:
Igor Vaynberg (ivaynberg at apache dot org)
See Also:
  • Field Details

  • Constructor Details

    • TabbedPanel

      public TabbedPanel(String id, List<T> tabs)
      Constructor
      Parameters:
      id - component id
      tabs - list of ITab objects used to represent tabs
    • TabbedPanel

      public TabbedPanel(String id, List<T> tabs, IModel<Integer> model)
      Constructor
      Parameters:
      id - component id
      tabs - list of ITab objects used to represent tabs
      model - model holding the index of the selected tab
  • Method Details

    • initModel

      protected IModel<?> initModel()
      Override of the default initModel behaviour. This component will not use any compound model of a parent.
      Overrides:
      initModel in class Component
      See Also:
    • newTabsContainer

      Generates the container for all tabs. The default container automatically adds the css class attribute based on the return value of getTabContainerCssClass()
      Parameters:
      id - container id
      Returns:
      container
    • newTabContainer

      protected LoopItem newTabContainer(int tabIndex)
      Generates a loop item used to represent a specific tab's li element.
      Parameters:
      tabIndex -
      Returns:
      new loop item
    • onBeforeRender

      protected void onBeforeRender()
      Overrides:
      onBeforeRender in class Component
    • getTabContainerCssClass

      Returns:
      the value of css class attribute that will be added to a div containing the tabs. The default value is tab-row
    • getLastTabCssClass

      Returns:
      the value of css class attribute that will be added to last tab. The default value is last
    • getSelectedTabCssClass

      Returns:
      the value of css class attribute that will be added to selected tab. The default value is selected
    • getTabs

      public final List<T> getTabs()
      Returns:
      list of tabs that can be used by the user to add/remove/reorder tabs in the panel
    • newTitle

      protected Component newTitle(String titleId, IModel<?> titleModel, int index)
      Factory method for tab titles. Returned component can be anything that can attach to span tags such as a fragment, panel, or a label
      Parameters:
      titleId - id of title component
      titleModel - model containing tab title
      index - index of tab
      Returns:
      title component
    • newLink

      protected WebMarkupContainer newLink(String linkId, int index)
      Factory method for links used to switch between tabs. The created component is attached to the following markup. Label component with id: title will be added for you by the tabbed panel.
       <a href="#" wicket:id="link"><span wicket:id="title">[[tab title]]</span></a>
       
      Example implementation:
       protected WebMarkupContainer newLink(String linkId, final int index)
       {
              return new Link(linkId)
              {
                      private static final long serialVersionUID = 1L;
       
                      public void onClick()
                      {
                              setSelectedTab(index);
                      }
              };
       }
       
      Parameters:
      linkId - component id with which the link should be created
      index - index of the tab that should be activated when this link is clicked. See setSelectedTab(int).
      Returns:
      created link component
    • setSelectedTab

      public TabbedPanel<T> setSelectedTab(int index)
      sets the selected tab
      Parameters:
      index - index of the tab to select
      Returns:
      this for chaining
      Throws:
      IndexOutOfBoundsException - if index is not in the range of available tabs
    • getSelectedTab

      public final int getSelectedTab()
      Returns:
      index of the selected tab
    • onDetach

      protected void onDetach()
      Overrides:
      onDetach in class MarkupContainer