Package org.zkoss.zul

## Class Tabbox

- java.lang.Object
- - org.zkoss.zk.ui.AbstractComponent
  - - org.zkoss.zk.ui.HtmlBasedComponent
    - - org.zkoss.zul.impl.XulElement
      - - org.zkoss.zul.Tabbox

- All Implemented Interfaces:
    `java.io.Serializable`, `java.lang.Cloneable`, `Component`, `Scope`, `ComponentCtrl`

      public class Tabbox
      extends XulElement

  A tabbox.

  Event:

  1. org.zkoss.zk.ui.event.SelectEvent is sent when user changes the tab.

  Mold:

  default
    The default tabbox.
  accordion
    The accordion tabbox.

  `Toolbar` only works in the horizontal default mold and the `isTabscroll()` to be true. (since 3.6.3)

  Default `getZclass()`: z-tabbox. (since 3.5.0)

  Besides creating `Tab` and `Tabpanel` programmatically, you could assign a data model (a `ListModel` to a Tabbox via `setModel(ListModel)` and then the tabbox will retrieve data via `ListModel.getElementAt(int)` when necessary. (since 7.0.0) [ZK EE]

  Besides assign a list model, you could assign a renderer (a `TabboxRenderer` instance) to a Tabbox, such that the Tabbox will use this renderer to render the data returned by `ListModel.getElementAt(int)`. If not assigned, the default renderer, which assumes a label per Tab and Tabpanel, is used. In other words, the default renderer adds a label to a Tab and Tabpanel by calling toString against the object returned by `ListModel.getElementAt(int)` (since 7.0.0) [ZK EE]

  To retrieve what are selected in Tabbox with a `Selectable` `ListModel`, you shall use `Selectable.getSelection()` to get what is currently selected object in `ListModel` rather than using `getSelectedTab()`. That is, you shall operate on the data of the `ListModel` rather than on the `Tab` of the `Tabbox` if you use the `Selectable` `ListModel`. (since 7.0.0) [ZK EE]

       Set selection = ((Selectable)getModel()).getSelection();

  Author:
    tomyeh
  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.zkoss.zk.ui.HtmlBasedComponent

      `HtmlBasedComponent.ExtraCtrl`

    - ### Nested classes/interfaces inherited from class org.zkoss.zk.ui.AbstractComponent

      `AbstractComponent.Children, AbstractComponent.ForwardInfo, AbstractComponent.TargetInfo`

  - ### Field Summary

    - ### Fields inherited from class org.zkoss.zk.ui.HtmlBasedComponent

      `_zclass`

    - ### Fields inherited from interface org.zkoss.zk.ui.Component

      `APPLICATION_SCOPE, COMPONENT_SCOPE, DESKTOP_SCOPE, PAGE_SCOPE, REQUEST_SCOPE, SESSION_SCOPE, SPACE_SCOPE`

    - ### Fields inherited from interface org.zkoss.zk.ui.sys.ComponentCtrl

      `AFTER_CHILD_ADDED, AFTER_CHILD_REMOVED, AFTER_CLONED, AFTER_PAGE_ATTACHED, AFTER_PAGE_DETACHED, AFTER_PARENT_CHANGED, CE_BUSY_IGNORE, CE_DUPLICATE_IGNORE, CE_IMPORTANT, CE_NON_DEFERRABLE, CE_REPEAT_IGNORE`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `Tabbox()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `beforeChildAdded​(Component child, Component refChild)` | Default: does nothing.
    `protected void` | `clearSelectedTab()` |
    `java.lang.Object` | `clone()` | Clones the component.
    `TabboxEngine` | `getEngine()` | Returns the implementation tabbox engine.
    `<T> ListModel<T>` | `getModel()` | Returns the model associated with this selectbox, or null if this selectbox is not associated with any list data model.
    `java.lang.String` | `getOrient()` | Returns the orient.
    `java.lang.String` | `getPanelSpacing()` | Returns the spacing between `Tabpanel`.
    `Selectable<java.lang.Object>` | `getSelectableModel()` |
    `int` | `getSelectedIndex()` | Returns the selected index.
    `Tabpanel` | `getSelectedPanel()` | Returns the selected tab panel.
    `Tab` | `getSelectedTab()` | Returns the selected tab.
    `<T> TabboxRenderer<T>` | `getTabboxRenderer()` | Returns the renderer to render each tab and tabpanel, or null if the default renderer is used.
    `Tabpanels` | `getTabpanels()` | Returns the tabpanels that this tabbox owns.
    `Tabs` | `getTabs()` | Returns the tabs that this tabbox owns.
    `Toolbar` | `getToolbar()` | Returns the auxiliary toolbar that this tabbox owns.
    `java.lang.String` | `getZclass()` | Returns the ZK Cascading Style class for this component.
    `boolean` | `insertBefore​(Component child, Component refChild)` | Inserts a child before the reference child.
    `boolean` | `isBottom()` | Returns whether it is the bottom orientation.
    `boolean` | `isHorizontal()` | Returns whether it is a horizontal tabbox.
    `boolean` | `isLeft()` | Returns whether it is the left orientation.
    `boolean` | `isMaximalHeight()` | Returns whether to use maximum height of all tabpanel in initial phase.
    `boolean` | `isRight()` | Returns whether it is the right orientation.
    `boolean` | `isTabscroll()` | Returns whether the tab scrolling is enabled.
    `boolean` | `isTop()` | Returns whether it is the top orientation.
    `boolean` | `isVertical()` | Returns whether it is a vertical tabbox.
    `protected TabboxEngine` | `newTabboxEngine()` | Instantiates the default tabbox engine.
    `void` | `onChildRemoved​(Component child)` | Default: handles special event listeners.
    `void` | `onInitRender()` |
    `void` | `onPageAttached​(Page newpage, Page oldpage)` | Default: handles special event listeners.
    `void` | `onPageDetached​(Page page)` | Default: handles special event listeners.
    `void` | `postOnInitRender()` | Component internal use only.
    `protected void` | `renderProperties​(ContentRenderer renderer)` | Renders the content of this component, excluding the enclosing tags and children.
    `void` | `setEngine​(TabboxEngine engine)` | Sets the tabbox engine for `ListModel`
    `void` | `setMaximalHeight​(boolean maximalHeight)` | Sets whether to use maximum height of all tabpanel in initial phase.
    `void` | `setModel​(ListModel<?> model)` | Sets the list model associated with this t.
    `void` | `setMold​(java.lang.String mold)` | Sets the mold.
    `void` | `setOrient​(java.lang.String orient)` | Sets the orient.
    `void` | `setPanelSpacing​(java.lang.String panelSpacing)` | Sets the spacing between `Tabpanel`.
    `void` | `setSelectedIndex​(int j)` | Sets the selected index.
    `void` | `setSelectedPanel​(Tabpanel panel)` | Sets the selected tab panel.
    `void` | `setSelectedTab​(Tab tab)` | Sets the selected tab.
    `void` | `setTabboxRenderer​(java.lang.String clsnm)` | Sets the renderer by use of a class name.
    `void` | `setTabboxRenderer​(TabboxRenderer<?> renderer)` | Sets the renderer which is used to render each tab and tabpanel if `getModel()` is not null.
    `void` | `setTabscroll​(boolean tabscroll)` | Sets whether to enable the tab scrolling.

    - ### Methods inherited from class org.zkoss.zul.impl.XulElement

      `getContext, getCtrlKeys, getPopup, getPropertyAccess, getTooltip, setContext, setContext, setContextAttributes, setCtrlKeys, setPopup, setPopup, setPopupAttributes, setTooltip, setTooltip, setTooltipAttributes`

    - ### Methods inherited from class org.zkoss.zk.ui.HtmlBasedComponent

      `addSclass, evalCSSFlex, focus, getAction, getClientAction, getDraggable, getDroppable, getExtraCtrl, getHeight, getHflex, getLeft, getRenderdefer, getSclass, getStyle, getTabindex, getTabindexInteger, getTooltiptext, getTop, getVflex, getWidth, getZindex, getZIndex, removeSclass, removeSclass, service, setAction, setClass, setClientAction, setDraggable, setDroppable, setFocus, setHeight, setHeight0, setHeightDirectly, setHflex, setHflex0, setHflexDirectly, setLeft, setLeftDirectly, setRenderdefer, setSclass, setStyle, setTabindex, setTabindex, setTooltiptext, setTop, setTopDirectly, setVflex, setVflex0, setVflexDirectly, setWidth, setWidth0, setWidthDirectly, setZclass, setZindex, setZIndex, setZIndexDirectly`

    - ### Methods inherited from class org.zkoss.zk.ui.AbstractComponent

      `addAnnotation, addCallback, addClientEvent, addEventHandler, addEventListener, addEventListener, addForward, addForward, addForward, addForward, addMoved, addRedrawCallback, addScopeListener, addShadowRoot, addShadowRootBefore, addSharedEventHandlerMap, appendChild, applyProperties, beforeChildRemoved, beforeParentChanged, destroyIndexCacheMap, detach, didActivate, didActivate, didDeserialize, didDeserialize, disableBindingAnnotation, disableClientUpdate, disableHostChanged, enableBindingAnnotation, enableHostChanged, getAnnotatedProperties, getAnnotatedPropertiesBy, getAnnotation, getAnnotations, getAnnotations, getAttribute, getAttribute, getAttribute, getAttributeOrFellow, getAttributes, getAttributes, getAuService, getAutag, getCallback, getChildren, getClientAttribute, getClientDataAttribute, getClientEvents, getDefaultMold, getDefinition, getDesktop, getEventHandler, getEventHandlerNames, getEventListenerMap, getEventListeners, getFellow, getFellow, getFellowIfAny, getFellowIfAny, getFellows, getFirstChild, getForwards, getId, getIndexCacheMap, getLastChild, getMold, getNextSibling, getPage, getParent, getPreviousSibling, getRedrawCallback, getRoot, getShadowFellowIfAny, getShadowRoots, getShadowVariable, getShadowVariable, getShadowVariable0, getSpaceOwner, getSpecialRendererOutput, getStubonly, getSubBindingAnnotationCount, getTemplate, getTemplateNames, getUuid, getWidgetAttributeNames, getWidgetClass, getWidgetListener, getWidgetListenerNames, getWidgetOverride, getWidgetOverrideNames, hasAttribute, hasAttribute, hasAttribute, hasAttributeOrFellow, hasBindingAnnotation, hasFellow, hasFellow, hasSubBindingAnnotation, initIndexCacheMap, invalidate, isChildable, isDisabledHostChanged, isInitialized, isInvalidated, isListenerAvailable, isVisible, onChildAdded, onParentChanged, onWrongValue, query, queryAll, redraw, redrawChildren, removeAttribute, removeAttribute, removeAttribute, removeCallback, removeChild, removeEventListener, removeForward, removeForward, removeRedrawCallback, removeScopeListener, removeShadowRoot, render, render, render, renderPropertiesOnly, replace, response, response, response, service, sessionDidActivate, sessionWillPassivate, setAttribute, setAttribute, setAttribute, setAuService, setAutag, setClientAttribute, setClientDataAttribute, setDefinition, setDefinition, setId, setPage, setPageBefore, setParent, setStubonly, setStubonly, setSubBindingAnnotationCount, setTemplate, setVisible, setVisibleDirectly, setWidgetClass, setWidgetListener, setWidgetOverride, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdateWidgetListener, smartUpdateWidgetOverride, toString, updateByClient, updateSubBindingAnnotationCount, willPassivate, willPassivate, willSerialize, willSerialize`

    - ### Methods inherited from class java.lang.Object

      `equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### Tabbox

          public Tabbox()

  - ### Method Detail

    - #### getEngine

          public TabboxEngine getEngine()
                                 throws UiException

      Returns the implementation tabbox engine.
      Throws:
        `UiException` - if failed to load the engine.
      Since:
        7.0.0

    - #### setEngine

          public void setEngine​(TabboxEngine engine)

      Sets the tabbox engine for `ListModel`
      Since:
        7.0.0

    - #### newTabboxEngine

          protected TabboxEngine newTabboxEngine()
                                          throws UiException

      Instantiates the default tabbox engine. It is called, if `setEngine(org.zkoss.zul.impl.TabboxEngine)` is not called with non-null engine.

      By default, it looks up the library property called org.zkoss.zul.tabbox.engine.class. If found, the value is assumed to be the class name of the tabbox engine (it must implement `TabboxEngine`). If not found, `UiException` is thrown.

      Derived class might override this method to provide your own default class.

      Throws:
        `UiException` - if failed to instantiate the engine
      Since:
        7.0.0

    - #### getSelectableModel

          public Selectable<java.lang.Object> getSelectableModel()

    - #### setModel

          public void setModel​(ListModel<?> model)

      Sets the list model associated with this t. If a non-null model is assigned, no matter whether it is the same as the previous, it will always cause re-render. [ZK EE]
      Parameters:
        `model` - the list model to associate, or null to dissociate any previous model.
      Throws:
        `UiException` - if failed to initialize with the model
      Since:
        7.0.0

    - #### getTabboxRenderer

          public <T> TabboxRenderer<T> getTabboxRenderer()

      Returns the renderer to render each tab and tabpanel, or null if the default renderer is used.
      Since:
        7.0.0

    - #### setTabboxRenderer

          public void setTabboxRenderer​(TabboxRenderer<?> renderer)

      Sets the renderer which is used to render each tab and tabpanel if `getModel()` is not null. [ZK EE]

      Note: changing a render will not cause the tabbox to re-render. If you want it to re-render, you could assign the same model again (i.e., setModel(null) and than setModel(oldModel)), or fire an `ListDataEvent` event.

      Parameters:
        `renderer` - the renderer, or null to use the default.
      Throws:
        `UiException` - if failed to initialize with the model
      Since:
        7.0.0

    - #### setTabboxRenderer

          public void setTabboxRenderer​(java.lang.String clsnm)
                                 throws java.lang.ClassNotFoundException,
                                        java.lang.NoSuchMethodException,
                                        java.lang.IllegalAccessException,
                                        java.lang.InstantiationException,
                                        java.lang.reflect.InvocationTargetException

      Sets the renderer by use of a class name. It creates an instance automatically. [ZK EE]
      Throws:
        `java.lang.ClassNotFoundException`
        `java.lang.NoSuchMethodException`
        `java.lang.IllegalAccessException`
        `java.lang.InstantiationException`
        `java.lang.reflect.InvocationTargetException`
      Since:
        7.0.0
      See Also:
        `setTabboxRenderer(TabboxRenderer)`

    - #### onInitRender

          public void onInitRender()

    - #### postOnInitRender

          public void postOnInitRender()

      Component internal use only.
      Since:
        7.0.0

    - #### getModel

          public <T> ListModel<T> getModel()

      Returns the model associated with this selectbox, or null if this selectbox is not associated with any list data model.

    - #### getTabs

          public Tabs getTabs()

      Returns the tabs that this tabbox owns.

    - #### getToolbar

          public Toolbar getToolbar()

      Returns the auxiliary toolbar that this tabbox owns.
      Since:
        3.6.3

    - #### getTabpanels

          public Tabpanels getTabpanels()

      Returns the tabpanels that this tabbox owns.

    - #### isTabscroll

          public boolean isTabscroll()

      Returns whether the tab scrolling is enabled. Default: true.
      Since:
        3.5.0

    - #### setTabscroll

          public void setTabscroll​(boolean tabscroll)

      Sets whether to enable the tab scrolling. When enabled, if tab list is wider than tab bar, left, right arrow will appear.
      Since:
        3.5.0

    - #### isMaximalHeight

          public boolean isMaximalHeight()

      Returns whether to use maximum height of all tabpanel in initial phase.

      Default: false.

      Since:
        7.0.0

    - #### setMaximalHeight

          public void setMaximalHeight​(boolean maximalHeight)

      Sets whether to use maximum height of all tabpanel in initial phase.

      The Client ROD feature will be disabled if it is set to true.

      Since:
        7.0.0

    - #### getPanelSpacing

          public java.lang.String getPanelSpacing()

      Returns the spacing between `Tabpanel`. This is used by certain molds, such as accordion.

      Default: null (no spacing).

    - #### setPanelSpacing

          public void setPanelSpacing​(java.lang.String panelSpacing)

      Sets the spacing between `Tabpanel`. This is used by certain molds, such as accordion.

    - #### getSelectedIndex

          public int getSelectedIndex()

      Returns the selected index.

    - #### setSelectedIndex

          public void setSelectedIndex​(int j)

      Sets the selected index.

    - #### getSelectedPanel

          public Tabpanel getSelectedPanel()

      Returns the selected tab panel.

    - #### setSelectedPanel

          public void setSelectedPanel​(Tabpanel panel)

      Sets the selected tab panel.

    - #### getSelectedTab

          public Tab getSelectedTab()

      Returns the selected tab.

    - #### setSelectedTab

          public void setSelectedTab​(Tab tab)

      Sets the selected tab.

    - #### getOrient

          public java.lang.String getOrient()

      Returns the orient.

      Default: "top".

      Note: only the default mold supports it (not supported if accordion).

    - #### setMold

          public void setMold​(java.lang.String mold)

      Sets the mold.
      Specified by:
        `setMold` in interface `Component`
      Overrides:
        `setMold` in class `AbstractComponent`
      Parameters:
        `mold` - default , accordion and accordion-lite
      See Also:
        `ComponentDefinition`

    - #### setOrient

          public void setOrient​(java.lang.String orient)
                         throws WrongValueException

      Sets the orient.
      Parameters:
        `orient` - either "top", "left", "bottom or "right".
      Throws:
        `WrongValueException`
      Since:
        7.0.0 "horizontal" is renamed to "top" and "vertical" is renamed to "left".

    - #### isHorizontal

          public boolean isHorizontal()

      Returns whether it is a horizontal tabbox.
      Since:
        3.0.3

    - #### isTop

          public boolean isTop()

      Returns whether it is the top orientation.
      Since:
        7.0.0

    - #### isBottom

          public boolean isBottom()

      Returns whether it is the bottom orientation.
      Since:
        7.0.0

    - #### isVertical

          public boolean isVertical()

      Returns whether it is a vertical tabbox.
      Since:
        3.0.3

    - #### isLeft

          public boolean isLeft()

      Returns whether it is the left orientation.
      Since:
        7.0.0

    - #### isRight

          public boolean isRight()

      Returns whether it is the right orientation.
      Since:
        7.0.0

    - #### getZclass

          public java.lang.String getZclass()

      Description copied from class: `HtmlBasedComponent`
      Returns the ZK Cascading Style class for this component. It usually depends on the implementation of the mold (`AbstractComponent.getMold()`).

      Default: null (the default value depends on element).

      `HtmlBasedComponent.setZclass(java.lang.String)`) will completely replace the default style of a component. In other words, the default style of a component is associated with the default value of `HtmlBasedComponent.getZclass()`. Once it is changed, the default style won't be applied at all. If you want to perform small adjustments, use `HtmlBasedComponent.setSclass(java.lang.String)` instead.

      Overrides:
        `getZclass` in class `HtmlBasedComponent`
      See Also:
        `HtmlBasedComponent.getSclass()`

    - #### beforeChildAdded

          public void beforeChildAdded​(Component child,
                                       Component refChild)

      Description copied from class: `AbstractComponent`
      Default: does nothing.
      Specified by:
        `beforeChildAdded` in interface `ComponentCtrl`
      Overrides:
        `beforeChildAdded` in class `AbstractComponent`
      Parameters:
        `child` - the child to be added (never null).
        `refChild` - another child component that the new child will be inserted before it. If null, the new child will be the last child.
      See Also:
        `ComponentCtrl.beforeChildAdded(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.Component)`

    - #### insertBefore

          public boolean insertBefore​(Component child,
                                      Component refChild)

      Description copied from interface: `Component`
      Inserts a child before the reference child.

      You could use `Component.setParent(org.zkoss.zk.ui.Component)` or `Component.appendChild(org.zkoss.zk.ui.Component)` instead of this method, unless you want to control where to put the child.

      Note: `Component.setParent(org.zkoss.zk.ui.Component)` always calls back `Component.insertBefore(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.Component)` and/or `Component.removeChild(org.zkoss.zk.ui.Component)`, while `Component.insertBefore(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.Component)` and `Component.removeChild(org.zkoss.zk.ui.Component)` always calls back `Component.setParent(org.zkoss.zk.ui.Component)`, if the parent is changed. Thus, you don't need to override both `Component.insertBefore(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.Component)` and `Component.setParent(org.zkoss.zk.ui.Component)`, if you want to customize the behavior.

      If you would like to monitor if a component is attached or detached from a page, you could register a desktop listener implementing `UiLifeCycle`.

      Specified by:
        `insertBefore` in interface `Component`
      Overrides:
        `insertBefore` in class `AbstractComponent`
      Parameters:
        `child` - the new child to be inserted.
        `refChild` - the child before which you want the new child being inserted. If null, the new child is append to the end.
      Returns:
        true if newChild is added successfully or moved; false if it already has the specified child and the order doesn't change.

    - #### onChildRemoved

          public void onChildRemoved​(Component child)

      Description copied from class: `AbstractComponent`
      Default: handles special event listeners.
      Specified by:
        `onChildRemoved` in interface `ComponentCtrl`
      Overrides:
        `onChildRemoved` in class `AbstractComponent`
      See Also:
        `ComponentCtrl.onChildRemoved(org.zkoss.zk.ui.Component)`

    - #### clearSelectedTab

          protected void clearSelectedTab()

    - #### clone

          public java.lang.Object clone()

      Description copied from interface: `Component`
      Clones the component. All of its children and descendants are cloned. Also, ID are preserved.
      Specified by:
        `clone` in interface `Component`
      Overrides:
        `clone` in class `XulElement`
      Returns:
        the new component. Notice that it doesn't belong to any page, nor desktop. It doesn't have a parent, either.

    - #### renderProperties

          protected void renderProperties​(ContentRenderer renderer)
                                   throws java.io.IOException

      Description copied from class: `HtmlBasedComponent`
      Renders the content of this component, excluding the enclosing tags and children.

      See also ZK Client-side Reference: Property Rendering

      Overrides:
        `renderProperties` in class `XulElement`
      Throws:
        `java.io.IOException`

    - #### onPageAttached

          public void onPageAttached​(Page newpage,
                                     Page oldpage)

      Description copied from class: `AbstractComponent`
      Default: handles special event listeners.
      Specified by:
        `onPageAttached` in interface `ComponentCtrl`
      Overrides:
        `onPageAttached` in class `AbstractComponent`
      Parameters:
        `newpage` - the new page (never null).
        `oldpage` - the previous page, if any, or null if it didn't belong to any page.
      See Also:
        `ComponentCtrl.onPageAttached(org.zkoss.zk.ui.Page, org.zkoss.zk.ui.Page)`

    - #### onPageDetached

          public void onPageDetached​(Page page)

      Description copied from class: `AbstractComponent`
      Default: handles special event listeners.
      Specified by:
        `onPageDetached` in interface `ComponentCtrl`
      Overrides:
        `onPageDetached` in class `AbstractComponent`
      Parameters:
        `page` - the previous page (never null)
      See Also:
        `ComponentCtrl.onPageDetached(org.zkoss.zk.ui.Page)`