# Package com.codename1.ui.list

package com.codename1.ui.list

Lists are highly customizable and serve as the basis for `com.codename1.ui.ComboBox` and other components (such as carousels etc) they employ a similar MVC approach to Swing including the renderer pattern, notice that we strongly discourage usage of lists... `com.codename1.ui.list.ListCellRenderer` allows us to customize the appearance of a list entry, it works as a "rubber stamp" by drawing the rendered component and discarding its state thus allowing very large lists with very little component state overhead.

`com.codename1.ui.list.ListModel` allows us to represent the underlying data structure for the `com.codename1.ui.List`/`com.codename1.ui.ComboBox` without requiring all the data to reside in memory or in a specific structure. This allows a model to represent a data source of any type, coupled with the renderer the data source can be returned in an internal representation state and still be rendered properly to the screen.

- Related Packages
  Package
  Description
  com.codename1.ui
  Main widget package containing the component/container "composite" similar both in terminology and design to Swing/AWT.
- Class
  Description
  CellRenderer<T>
  This class is geared to replace the ListCellRenderer in the long run to provide a more generic rendering API.
  ContainerList
  This is a "list component" implemented as a container with a layout manager which provides some of the ui advantages of a Container and some of a list while pulling out some of the drawbacks of both.
  DefaultListCellRenderer<T>
  Default implementation of the renderer based on a label see the `ListCellRenderer` for more information about the use and purpose of this class
  DefaultListModel<T>
  Default implementation of the list model based on a `List` of elements.
  FilterProxyListModel<T>
  This class allows filtering/sorting a list model dynamically using a text field
  GenericListCellRenderer<T>
  The generic list cell renderer can display containers or arbitrary Codename One components as items in a list, notice that we strongly discourage usage of lists..
  ListCellRenderer<T>
  A "rubber stamp" tool that allows us to extract a component (often the same component instance for all invocations) that is initialized to the value of the current item extracted from the model, this component is drawn on the list and discarded.
  ListModel<T>
  Represents the data structure of the list, thus allowing a list to represent any potential data source by referencing different implementations of this interface, notice that we strongly discourage usage of lists..
  MultiList
  A list with a `com.codename1.components.MultiButton` renderer, notice that we strongly discourage usage of lists..
  MultipleSelectionListModel<T>
  Events `ListModel` to support multiple selection.