Package org.zkoss.zul

## Class Treechildren

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

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

      public class Treechildren
      extends XulElement

  A treechildren.
  Author:
    tomyeh
  See Also:
    Serialized Form

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `protected class` | `Treechildren.ExtraCtrl` | A utility class to implement `HtmlBasedComponent.getExtraCtrl()`.

    - ### 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
    --- | ---
    `Treechildren()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `beforeChildAdded​(Component child, Component refChild)` | Default: does nothing.
    `void` | `beforeParentChanged​(Component parent)` | Default: If parent is null, execute the @Destroy method if any.
    `java.lang.Object` | `getExtraCtrl()` | Returns the client control for this component.
    `int` | `getItemCount()` | Returns the number of child `Treeitem` including all descendants.
    `java.util.Collection<Treeitem>` | `getItems()` | Returns a readonly list of all descending `Treeitem` (children's children and so on).
    `Treerow` | `getLinkedTreerow()` | Returns the `Treerow` that is associated with this treechildren, or null if no such treerow.
    `Tree` | `getTree()` | Returns the `Tree` instance containing this element.
    `int` | `getVisibleItemCount()` | Returns the number of visible descendant `Treeitem`.
    `java.lang.String` | `getZclass()` | Returns the ZK Cascading Style class for this component.
    `boolean` | `insertBefore​(Component newChild, Component refChild)` | Inserts a child before the reference child.
    `void` | `onChildAdded​(Component child)` | Default: handles special event listeners.
    `void` | `onChildRemoved​(Component child)` | Default: handles special event listeners.
    `void` | `onPageAttached​(Page newpage, Page oldpage)` | Default: handles special event listeners.
    `protected void` | `redrawChildren​(java.io.Writer out)` | Redraws children (and then recursively descendants).
    `void` | `setHflex​(java.lang.String flex)` | Deprecated. as of release 6.0.0.
    `void` | `setParent​(Component parent)` | Sets the parent component.
    `void` | `setWidth​(java.lang.String width)` | Deprecated. as of release 6.0.0.
    `protected void` | `smartUpdate​(java.lang.String name, java.lang.Object value)` | Smart-updates a property of the peer widget associated with the component, running at the client, with the given value.

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

      `clone, getContext, getCtrlKeys, getPopup, getPropertyAccess, getTooltip, renderProperties, 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, 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, setHflex0, setHflexDirectly, setLeft, setLeftDirectly, setRenderdefer, setSclass, setStyle, setTabindex, setTabindex, setTooltiptext, setTop, setTopDirectly, setVflex, setVflex0, setVflexDirectly, 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, 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, onPageDetached, onParentChanged, onWrongValue, query, queryAll, redraw, 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, setMold, setPage, setPageBefore, setStubonly, setStubonly, setSubBindingAnnotationCount, setTemplate, setVisible, setVisibleDirectly, setWidgetClass, setWidgetListener, setWidgetOverride, 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

    - #### Treechildren

          public Treechildren()

  - ### Method Detail

    - #### getTree

          public Tree getTree()

      Returns the `Tree` instance containing this element.

    - #### getLinkedTreerow

          public Treerow getLinkedTreerow()

      Returns the `Treerow` that is associated with this treechildren, or null if no such treerow. In other words, it is `Treeitem.getTreerow()` of `AbstractComponent.getParent()`.
      Since:
        2.4.1
      See Also:
        `Treerow.getLinkedTreechildren()`

    - #### getItems

          public java.util.Collection<Treeitem> getItems()

      Returns a readonly list of all descending `Treeitem` (children's children and so on).

      Note: the performance of the size method of returned collection is no good.

    - #### getItemCount

          public int getItemCount()

      Returns the number of child `Treeitem` including all descendants. The same as `getItems()`.size().

      Note: the performance is no good.

    - #### getVisibleItemCount

          public int getVisibleItemCount()

      Returns the number of visible descendant `Treeitem`. Descendants include direct children, grand children and so on.
      Since:
        3.0.7

    - #### onChildAdded

          public void onChildAdded​(Component child)

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

    - #### 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)`

    - #### insertBefore

          public boolean insertBefore​(Component newChild,
                                      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:
        `newChild` - 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.

    - #### setWidth

          public void setWidth​(java.lang.String width)

      Deprecated.
      as of release 6.0.0. To control the size of Tree related components, please refer to `Tree` and `Treecol` instead.
      Description copied from class: `HtmlBasedComponent`
      Sets the width. If null, the best fit is used.
      Overrides:
        `setWidth` in class `HtmlBasedComponent`
      See Also:
        `HtmlBasedComponent.setWidthDirectly(java.lang.String)`, `AbstractComponent.disableClientUpdate(boolean)`

    - #### setHflex

          public void setHflex​(java.lang.String flex)

      Deprecated.
      as of release 6.0.0. To control the size of Tree related components, please refer to `Tree` and `Treecol` instead.
      Description copied from class: `HtmlBasedComponent`
      Sets horizontal flex hint of this component.

      Number flex indicates how this component's container distributes remaining empty space among its children horizontally. Flexible component grow and shrink to fit their given space. Flexible components with larger flex values will be made larger than components with lower flex values, at the ratio determined by all flexible components. The actual flex value is not relevant unless there are other flexible components within the same container. Once the default sizes of components in a container are calculated, the remaining space in the container is divided among the flexible components, according to their flex ratios.

      Specify a flex value of negative value, 0, or "false" has the same effect as leaving the flex attribute out entirely. Specify a flex value of "true" has the same effect as a flex value of 1.

      Special flex hint, "min", indicates that the minimum space shall be given to this flexible component to enclose all of its children components. That is, the flexible component grow and shrink to fit its children components.

      Overrides:
        `setHflex` in class `HtmlBasedComponent`
      Parameters:
        `flex` - horizontal flex hint of this component.
      See Also:
        `HtmlBasedComponent.setVflex(java.lang.String)`, `HtmlBasedComponent.getHflex()`

    - #### beforeParentChanged

          public void beforeParentChanged​(Component parent)

      Description copied from class: `AbstractComponent`
      Default: If parent is null, execute the @Destroy method if any.
      Specified by:
        `beforeParentChanged` in interface `ComponentCtrl`
      Overrides:
        `beforeParentChanged` in class `AbstractComponent`
      Parameters:
        `parent` - the new parent. If null, it means detachment.
      See Also:
        `ComponentCtrl.beforeParentChanged(org.zkoss.zk.ui.Component)`

    - #### setParent

          public void setParent​(Component parent)

      Description copied from interface: `Component`
      Sets the parent component.

      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.

      Specified by:
        `setParent` in interface `Component`
      Overrides:
        `setParent` in class `AbstractComponent`

    - #### 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)`

    - #### 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()`

    - #### smartUpdate

          protected void smartUpdate​(java.lang.String name,
                                     java.lang.Object value)

      Description copied from class: `AbstractComponent`
      Smart-updates a property of the peer widget associated with the component, running at the client, with the given value.

      The second invocation with the same property will replace the previous call. In other words, the same property will be set only once in each execution. If you prefer to send both updates to the client, use `AbstractComponent.smartUpdate(String, Object, boolean)` instead.

      This method has no effect if `AbstractComponent.invalidate()` is ever invoked (in the same execution), since `AbstractComponent.invalidate()` assumes the whole content shall be redrawn and all smart updates to this components can be ignored,

      Once `AbstractComponent.invalidate()` is called, all invocations to `AbstractComponent.smartUpdate(String, Object)` will then be ignored, and `AbstractComponent.redraw(java.io.Writer)` will be invoked later.

      It can be called only in the request-processing and event-processing phases; excluding the redrawing phase.

      There are two ways to draw a component, one is to invoke `Component.invalidate()`, and the other is `AbstractComponent.smartUpdate(String, Object)`. While `Component.invalidate()` causes the whole content to redraw, `AbstractComponent.smartUpdate(String, Object)` let component developer control which part to redraw.

      Overrides:
        `smartUpdate` in class `AbstractComponent`
        `value` - the new value. If it is `DeferredValue`, the value will be retrieved (by calling `DeferredValue.getValue()`) in the rendering phase. It is useful if the value can not be determined now.

        For some old application servers (example, Websphere 5.1), `Execution.encodeURL(java.lang.String)` cannot be called in the event processing thread. So, the developers have to use `DeferredValue` or disable the use of the event processing thread (by use of `disable-event-thread` in zk.xml).

        If you want to generate the JavaScript code directly (i.e., the value is a valid JavaScript snippet), you can use `JavaScriptValue`. Notice that the JavaScript code will be evaluated before assigning it to the widget.

        If the value is a Date object, a special pattern will be generated (a.k.a., marshaling) to ensure it can be unmarshalled back correctly at the client. Notice that it is marshalled to a string based on `TimeZones.getCurrent()`, and then unmarshalled back at the client. In other words, if the client is in different time-zone, the value returned by getTime() might be different. However, the value will remain the same if the client marshalled the Date object back. In other words, it assumes the browser's time zone from enduser's perspective (not really browser's setting) shall be the same as `TimeZones.getCurrent()`.

        If the value is a component, a special pattern will be generated to ensure it can be unmarshalled back correctly at the client.

        In addition, the value can be any kind of objects that the client accepts (marshaled by JSON) (see also `JSONAware`).

      See Also:
        `AbstractComponent.updateByClient(java.lang.String, java.lang.Object)`, `AbstractComponent.smartUpdate(String, Object, boolean)`

    - #### 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)`

    - #### redrawChildren

          protected void redrawChildren​(java.io.Writer out)
                                 throws java.io.IOException

      Description copied from class: `AbstractComponent`
      Redraws children (and then recursively descendants).

      Default: it invokes `AbstractComponent.redraw(java.io.Writer)` for all its children.

      If a derived class renders only a subset of its children (such as paging/cropping), it could override `AbstractComponent.redrawChildren(java.io.Writer)`.

      Overrides:
        `redrawChildren` in class `AbstractComponent`
      Throws:
        `java.io.IOException`
      See Also:
        `AbstractComponent.redraw(java.io.Writer)`

    - #### getExtraCtrl

          public java.lang.Object getExtraCtrl()

      Description copied from class: `HtmlBasedComponent`
      Returns the client control for this component. It is used only by component developers.

      Default: creates an instance of `HtmlBasedComponent.ExtraCtrl`.

      Specified by:
        `getExtraCtrl` in interface `ComponentCtrl`
      Overrides:
        `getExtraCtrl` in class `HtmlBasedComponent`
      Returns:
        null if no special handling required. If the component requires some special controls, it could return an object that implements one or several interfaces in the org.zkoss.zk.ui.ext.render package. For example, `Cropper`.
      See Also:
        `ComponentCtrl.getExtraCtrl()`