public class Container
ImplementsAnimation, Editable, Iterable<Component>, StyleListener
Known subtypesBannerAd, VisionCameraView, ARView, CameraView, Accordion, Ads, AudioRecorderComponent, ButtonList, ChatBubble, ChatInput, ChatView, ClearableTextField, FloatingHint, InteractionDialog, MediaPlayer, MultiButton, OnOffSwitch, OtpField, PhoneNumberField, PhoneVerification, SignatureComponent, SpanButton, SpanLabel, SpanMultiButton, SplitPane, StickyHeaderContainer, WebBrowser, RenderView, LocationButton, MapComponent, MapView, NativeMap, TestRunnerComponent, AbstractEditorComponent, BrowserComponent, Calendar, ComponentGroup, Form, InfiniteContainer, InputComponent, InterFormContainer, MenuBar, Sheet, SwipeableContainer, Tabs, Toolbar, Window, HTMLComponent, ContainerList, Scene, BaseSpinner, Table, Tree, EmbeddedContainer, Media360View, VRView
A composite pattern with Component, allows nesting and arranging multiple
components using a pluggable layout manager architecture. Containers can be nested
one within the other to form elaborate UI’s. By default Containers use com.codename1.ui.layouts.FlowLayout
which isn’t ideal for most use cases.
Components within the Container MUST be arranged using a layout manager!
This allows the UI to adapt to different resolutions, DPI, orientation changes etc. seamlessly. Invoking any bounds setting method will produce unpredictable results. To learn about layout managers check out the relevant section in the developer guide.
A container doesn’t implicitly reflow its elements and in that regard follows the direction of AWT/Swing. As
a result the layout can be animated to create a flowing effect for UI changes. This also provides improved
performance as a bonus. See this sample of Container animation:
Form hi = new Form("Layout Animations", new BoxLayout(BoxLayout.Y_AXIS));
Button fall = new Button("Fall");
fall.addActionListener((e) -> {
for(int iter = 0 ; iter < 10 ; iter++) {
Label b = new Label ("Label " + iter);
b.setWidth(fall.getWidth());
b.setHeight(fall.getHeight());
b.setY(-fall.getHeight());
hi.add(b);
}
hi.getContentPane().animateLayout(20000);
});
hi.add(fall);
Many components within Codename One (e.g. com.codename1.ui.tree.Tree,
com.codename1.ui.table.Table,
com.codename1.components.MultiButton etc.) derive from Container instead of Component. This allows
such components to provide very rich functionality by building on top of the existing functionality.
Container also provides the lead component functionality that allows treating an entire Container hierarchy
as a single component. This is discussed in depth within the developer guide.
Constructors
public Container(Layout layout, String uiid) | Constructs a new Container with a new layout manager and UIID |
public Container(Layout layout) | Constructs a new Container with a new layout manager. |
public Container() | Constructs a new Container, with a FlowLayout. |
Methods
public static Container encloseIn(Layout l, Component cmp, Object cons) | Short-hand for enclosing a component within a Container |
public static Container encloseIn(Layout l, Component... cmp) | Short-hand for enclosing multiple components in a container typically a box layout |
protected void initLaf(UIManager uim) | This method initializes the Component defaults constants |
public UIManager getUIManager() | This method should be used by the Component to retrieve the correct UIManager to work with |
public void setUIManager(UIManager uiManager) | Allows replacing the UIManager in a component hierarchy to update the look and feel only to a specific hierarchy |
public boolean isSurface() | Checks if this container acts as a Material Design surface. |
public final Container add(Component cmp) | Simpler version of addComponent that allows chaining the calls for shorter syntax |
public Container addAll(Component... cmps) | Identical to add(x).add(y) only with a shorter syntax |
public Container add(Object constraint, Component cmp) | Simpler version of addComponent that allows chaining the calls for shorter syntax |
public Container add(String label) | Simpler version of addComponent that allows chaining the calls for shorter syntax |
public Container add(Image img) | Simpler version of addComponent that allows chaining the calls for shorter syntax |
public Container add(Object constraint, String label) | Simpler version of addComponent that allows chaining the calls for shorter syntax |
public Container add(Object constraint, Image img) | Simpler version of addComponent that allows chaining the calls for shorter syntax |
public Component getLeadComponent() | Returns the lead component for this hierarchy if such a component is defined |
public final void setLeadComponent(Component lead) | Sets the lead component for this container, a lead component takes over the entire component hierarchy and receives all the events for the container hierarchy. |
public Container getLeadParent() | Returns the lead container thats handling the leading, this is useful for a container hierarchy where the parent container might not be the leader |
public void keyPressed(int k) | If this Component is focused, the key pressed event will call this method |
public void keyReleased(int k) | If this Component is focused, the key released event will call this method |
public Layout getLayout() | Returns the layout manager responsible for arranging this container. |
public void setLayout(Layout layout) | Sets the layout manager responsible for arranging this container |
public void invalidate() | Same as setShouldCalcPreferredSize(true) but made accessible for layout managers |
protected void setShouldLayout(boolean layout) | Flags this container to preform layout |
public void setShouldCalcPreferredSize(boolean shouldCalcPreferredSize) | Indicates the values within the component have changed and preferred size should be recalculated |
public int getLayoutWidth() | Returns the width for layout manager purposes, this takes scrolling into consideration unlike the getWidth method. |
public int getLayoutHeight() | Returns the height for layout manager purposes, this takes scrolling into consideration unlike the getHeight method. |
public void applyRTL(boolean rtl) | Invokes apply/setRTL recursively on all the children components of this container |
protected boolean constrainWidthWhenScrollable() | Indicates that children’s widths should be calculated as if this component weren’t scrollable-X, even when the component is scrollable X. Normally, when a component is figuring out its layout width, it will walk up the UI hierarchy to find the first scrollable container. |
protected boolean constrainHeightWhenScrollable() | Indicates that children’s widths should be calculated as if this component weren’t scrollable-X, even when the component is scrollable Y. Normally, when a component is figuring out its layout width, it will walk up the UI hierarchy to find the first scrollable container. |
public void addComponent(Component cmp) | Adds a Component to the Container |
public void addComponent(Object constraints, Component cmp) | Adds a Component to the Container |
public void addComponent(int index, Object constraints, Component cmp) | Adds a Component to the Container |
public void addComponent(int index, Component cmp) | This method adds the Component at a specific index location in the Container Components array. |
public void replaceAndWait(Component current, Component next, Transition t) | This method replaces the current Component with the next Component. |
public void replaceAndWait(Component current, Component next, Transition t, int layoutAnimationSpeed) | This method replaces the current Component with the next Component. |
public void replace(Component current, Component next, Transition t, Runnable onFinish, int growSpeed) | This method replaces the current Component with the next Component |
public void replaceAndWait(Component current, Component next, Transition t, boolean dropEvents) | This method replaces the current Component with the next Component. |
public void replace(Component current, Component next, Transition t) | This method replaces the current Component with the next Component. |
public ComponentAnimation createReplaceTransition(Component current, Component next, Transition t) | This method creates an animation component that replaces the current Component with the next Component. |
public boolean isEnabled() | Indicates whether component is enabled or disabled thus allowing us to prevent a component from receiving input events and indicate so visually |
public void setEnabled(boolean enabled) | This method will recursively set all the Container chidrens to be enabled/disabled. |
public void removeComponent(Component cmp) | removes a Component from the Container, notice that removed component might still have a pending repaint in the queue that won’t be removed. |
protected void cancelRepaints() | remove this component and it’s children from the painting queue |
public void flushReplace() | Deprecated Flushes ongoing replace operations to prevent two concurrent replace operations from colliding. |
public void removeAll() | remove all Components from container, notice that removed component might still have a pending repaint in the queue that won’t be removed. |
public void revalidateWithAnimationSafety() | Revalidates the container in a way that doesn’t conflict with running animations. |
public void revalidate() | Re-layout the container, this is useful when we modify the container hierarchy and need to redo the layout |
public void revalidateLater() | Revalidates the container before the next paint cycle. |
public void forceRevalidate() | A more powerful form of revalidate that recursively lays out the full hierarchy |
public void clearClientProperties() | Clears all client properties from this Component |
public void paint(Graphics g) | This method paints the Component on the screen, it should be overriden by subclasses to perform custom drawing or invoke the UI API’s to let the PLAF perform the rendering. |
protected void paintGlass(Graphics g) | This method can be overriden by a component to draw on top of itself or its children after the component or the children finished drawing in a similar way to the glass pane but more refined per component |
public void layoutContainer() | Performs the layout of the container if a layout is necessary |
public boolean isSafeArea() | Checks if this container is a “safe area”. |
public void setSafeArea(boolean safeArea) | Marks this container as a “safe area”, meaning that it will automatically supply sufficient padding as necessary for its children to be laid out inside the safe area of the screen. |
public boolean isSafeAreaRoot() | Checks if this container is a safe area root. |
public Container getSafeAreaRoot() | Gets the Safe area “root” container for this container. |
public void setSafeAreaRoot(boolean root) | Set whether this container is a safe area root. |
public int getComponentCount() | Returns the number of components |
public Component getComponentAt(int index) | Returns the Component at a given index |
public int getComponentIndex(Component cmp) | Returns the Component index in the Container |
public boolean contains(Component cmp) | Returns true if the given component is within the hierarchy of this container |
public void scrollComponentToVisible(Component c) | Makes sure the component is visible in the scroll if this container is scrollable |
public Component getClosestComponentTo(int x, int y) | Very useful for touch events or drop events that need approximation more than accuracy |
public Component getResponderAt(int x, int y) | Returns the top-most component that responds to pointer events at absolute coordinate (x, y). |
public Component getComponentAt(int x, int y) | Returns a Component at coordinate (x, y). |
public Component findDropTargetAt(int x, int y) | Recursively searches the container hierarchy for a drop target |
public void pointerPressed(int x, int y) | If this Component is focused, the pointer pressed event will call this method |
protected Dimension calcPreferredSize() | Calculates the preferred size based on component content. |
protected String paramString() | Returns a string representing the state of this component. |
public void refreshTheme(boolean merge) | Makes sure the component is up to date with the current theme, ONLY INVOKE THIS METHOD IF YOU CHANGED THE THEME! |
public boolean isScrollableX() | Indicates whether the component should/could scroll on the X axis |
public void setScrollableX(boolean scrollableX) | Sets whether the component should/could scroll on the X axis |
public boolean isScrollableY() | Indicates whether the component should/could scroll on the Y axis |
public void setScrollableY(boolean scrollableY) | Sets whether the component should/could scroll on the Y axis |
public int getSideGap() | Returns the gap to be left for the side scrollbar on the Y axis. |
public int getBottomGap() | Returns the gap to be left for the bottom scrollbar on the X axis. |
public void setScrollable(boolean scrollable) | Deprecated The equivalent of calling both setScrollableY and setScrollableX |
public void setCellRenderer(boolean cellRenderer) | Used as an optimization to mark that this component is currently being used as a cell renderer |
public int getScrollIncrement() | Gets the Container scroll increment |
public void setScrollIncrement(int scrollIncrement) | Determines the scroll increment size of this Container. |
public Component findFirstFocusable() | Finds the first focusable Component on this Container |
protected void dragInitiated() | Invoked on the focus component to let it know that drag has started on the parent container for the case of a component that doesn’t support scrolling |
protected void fireClicked() | When working in 3 softbutton mode “fire” key (center softbutton) is sent to this method in order to allow 3 button devices to work properly. |
protected boolean isSelectableInteraction() | This method allows a component to indicate that it is interested in an “implicit” select command to appear in the “fire” button when 3 softbuttons are defined in a device. |
protected int getGridPosY() | This method should be implemented correctly by subclasses to make snap to grid functionality work as expected. |
public void paintComponentBackground(Graphics g) | Paints this container background, skipping container background fill when fully obscured by children. |
protected int getGridPosX() | This method should be implemented correctly by subclasses to make snap to grid functionality work as expected. |
public void animateHierarchyAndWait(int duration) | Animates a pending hierarchy of components into place, this effectively replaces revalidate with a more visual form of animation. |
public ComponentAnimation createAnimateHierarchy(int duration) | Animates a pending hierarchy of components into place, this effectively replaces revalidate with a more visual form of animation. |
public void animateHierarchy(int duration) | Animates a pending hierarchy of components into place, this effectively replaces revalidate with a more visual form of animation |
public void animateHierarchyFadeAndWait(int duration, int startingOpacity) | Animates a pending hierarchy of components into place, this effectively replaces revalidate with a more visual form of animation. |
public ComponentAnimation createAnimateHierarchyFade(int duration, int startingOpacity) | Animates a pending hierarchy of components into place, this effectively replaces revalidate with a more visual form of animation. |
public void animateHierarchyFade(int duration, int startingOpacity) | Animates a pending hierarchy of components into place, this effectively replaces revalidate with a more visual form of animation |
public void animateLayoutFadeAndWait(int duration, int startingOpacity) | Animates a pending layout into place, this effectively replaces revalidate with a more visual form of animation. |
public ComponentAnimation createAnimateLayoutFadeAndWait(int duration, int startingOpacity) | Deprecated Animates a pending layout into place, this effectively replaces revalidate with a more visual form of animation. |
public void animateLayoutFade(int duration, int startingOpacity) | Animates a pending layout into place, this effectively replaces revalidate with a more visual form of animation |
public ComponentAnimation createAnimateLayoutFade(int duration, int startingOpacity) | Animates a pending layout into place, this effectively replaces revalidate with a more visual form of animation |
public void animateLayoutAndWait(int duration) | Animates a pending layout into place, this effectively replaces revalidate with a more visual form of animation. |
public void animateLayout(int duration) | Animates a pending layout into place, this effectively replaces revalidate with a more visual form of animation |
public int updateTabIndices(int offset) | Deprecated Updates the tab indices in this container recursively. |
public ComponentAnimation createAnimateLayout(int duration) | Animates a pending layout into place, this effectively replaces revalidate with a more visual form of animation |
public void drop(Component dragged, int x, int y) | Performs a drop operation of the component at the given X/Y location in coordinate space, this method should be overriden by subclasses to perform all of the logic related to moving a component, by default this method does nothing and so dr… |
protected Motion createAnimateMotion(int start, int destination, int duration) | Creates a motion object for animation, allows subclasses to replace the motion type used in animations (currently defaults to ease-in). |
public void morph(Component source, Component destination, int duration, Runnable onCompletion) | Morph is similar to the replace functionality where a component might be replaced with a component that isn’t within the container. |
public void morphAndWait(Component source, Component destination, int duration) | Morph is similar to the replace functionality where a component might be replaced with a component that isn’t within the container. |
public void animateUnlayout(int duration, int opacity, Runnable callback) | This method is the exact reverse of animateLayout, when completed it leaves the container in an invalid state. |
public void animateUnlayoutAndWait(int duration, int opacity) | This method is the exact reverse of animateLayoutAndWait, when completed it leaves the container in an invalid state. |
public ComponentAnimation createAnimateUnlayout(int duration, int opacity, Runnable callback) | This method is the exact reverse of createAnimateLayout, when animation is completed it leaves the container in an invalid state. |
public List<Component> getChildrenAsList(boolean includeQueued) | Gets the child components of this Container as a List. |
public Iterator<Component> iterator(boolean includeQueued) | Obtains an iterator that iterates over the children of this container. |
public Iterator<Component> iterator() | Part of the Iterable interface allowing us to do a for-each loop on Container |
Inherited fields
From Component
DEFAULT_CURSOR, CROSSHAIR_CURSOR, TEXT_CURSOR, WAIT_CURSOR, SW_RESIZE_CURSOR, SE_RESIZE_CURSOR, NW_RESIZE_CURSOR, NE_RESIZE_CURSOR, N_RESIZE_CURSOR, S_RESIZE_CURSOR, W_RESIZE_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, MOVE_CURSOR, DRAG_REGION_NOT_DRAGGABLE, DRAG_REGION_POSSIBLE_DRAG_X, DRAG_REGION_POSSIBLE_DRAG_Y, DRAG_REGION_POSSIBLE_DRAG_XY, DRAG_REGION_LIKELY_DRAG_X, DRAG_REGION_LIKELY_DRAG_Y, DRAG_REGION_LIKELY_DRAG_XY, DRAG_REGION_IMMEDIATELY_DRAG_X, DRAG_REGION_IMMEDIATELY_DRAG_Y, DRAG_REGION_IMMEDIATELY_DRAG_XY, BRB_CONSTANT_ASCENT, BRB_CONSTANT_DESCENT, BRB_CENTER_OFFSET, BRB_OTHER, CENTER, TOP, LEFT, BOTTOM, RIGHT, BASELINE
Inherited methods
From Component
setSameSize, isSetCursorSupported, parsePreferredSize, getDefaultDragTransparency, setDefaultDragTransparency, getEditingDelegate, setEditingDelegate, getCursor, setCursor, showNativeOverlay, hideNativeOverlay, updateNativeOverlay, getNativeOverlay, getAllStyles, getSameWidth, setSameWidth, getSameHeight, setSameHeight, getX, setX, getOuterX, getInnerX, getY, setY, getOuterY, getInnerY, isVisible, setVisible, getClientProperty, stripMarginAndPadding, putClientProperty, getDirtyRegion, setDirtyRegion, isOpaque, setOpaque, getWidth, setWidth, getOuterWidth, getInnerWidth, getHeight, setHeight, getOuterHeight, getInnerHeight, isDragRegion, getDragRegionStatus, getBaseline, getBaselineResizeBehavior, getPreferredSizeStr, setPreferredSizeStr, getPreferredSize, setPreferredSize, getScrollDimension, calcScrollSize, setScrollSize, getPreferredW, setPreferredW, getPreferredH, setPreferredH, getOuterPreferredH, getInnerPreferredH, getOuterPreferredW, getInnerPreferredW, setSize, getUIID, setUIID, setUIIDFinal, setUIID, getInlineAllStyles, setInlineAllStyles, getInlineSelectedStyles, setInlineSelectedStyles, getInlineUnselectedStyles, setInlineUnselectedStyles, getInlineDisabledStyles, setInlineDisabledStyles, getInlinePressedStyles, setInlinePressedStyles, remove, getParent, getOwner, setOwner, isOwnedBy, containsOrOwns, addFocusListener, removeFocusListener, addScrollListener, removeScrollListener, getSelectCommandText, setSelectCommandText, getLabelForComponent, setLabelForComponent, focusGained, focusLost, paintBackgrounds, paintShadows, getAbsoluteX, getAbsoluteY, isInClippingRegion, paintIntersectingComponentsAbove, paintScrollbars, paintScrollbarX, getScrollOpacity, getSelectedRect, paintScrollbarY, paintComponent, paintComponent, getBorder, getScrollable, paintBackground, isScrollable, getScrollX, setScrollX, getScrollY, setScrollY, onScrollX, onScrollY, getDraggedx, getDraggedy, contains, visibleBoundsContains, hasFixedPreferredSize, getBounds, getBounds, getVisibleBounds, getVisibleBounds, isFocusable, setFocusable, onSetFocusable, resetFocusable, getTabIndex, setTabIndex, getPreferredTabIndex, setPreferredTabIndex, isTraversable, setTraversable, handlesInput, setHandlesInput, consumesRawTextInput, hasFocus, setFocus, getComponentForm, getTopLevelContainer, repaint, repaint, longKeyPress, keyRepeated, registerForAnimation, deregisterFromAnimation, getAnimationManager, getScrollAnimationSpeed, setScrollAnimationSpeed, isBlockLead, setBlockLead, isIgnorePointerEvents, setIgnorePointerEvents, isRippleEffect, setRippleEffect, getInlineStylesTheme, setInlineStylesTheme, shouldRenderComponentSelection, isHideInLandscape, setHideInLandscape, createStyleAnimation, isSmoothScrolling, setSmoothScrolling, pointerHover, stopScrollMomentum, pointerHoverReleased, pointerHoverPressed, pinch, pinchReleased, pinch, rotation, isPinchBlocksDragAndDrop, setPinchBlocksDragAndDrop, pointerDragged, getDragImage, getDragTransparency, setDragTransparency, toImage, drawDraggedImage, draggingOver, dragEnter, dragExit, addPullToRefresh, setPullToRefresh, respondsToPointerEvents, pointerDragged, isStickyDrag, pointerPressed, isDragAndDropOperation, pointerReleased, longPointerPress, pointerReleased, setVerticalScrollBounds, setHorizontalScrollBounds, isVScrollThumbGrabbed, isHScrollThumbGrabbed, isVScrollThumbHover, isHScrollThumbHover, isTensileDragEnabled, setTensileDragEnabled, getTextSelectionSupport, addDropListener, removeDropListener, addDragOverListener, removeDragOverListener, isNativeDragSource, setNativeDragSource, getNativeDragOperation, setNativeDragOperation, createNativeDragOperation, isNativeDropTarget, setNativeDropTarget, getAcceptedDropMimeTypes, setAcceptedDropMimeTypes, getAcceptedDropActions, setAcceptedDropActions, canAcceptNativeDrop, nativeDragEnter, nativeDragOver, nativeDragExit, nativeDrop, addNativeDropListener, removeNativeDropListener, addNativeDragOverListener, removeNativeDragOverListener, dragFinished, addDragFinishedListener, addStateChangeListener, removeStateChangeListener, addPointerPressedListener, addLongPressListener, addContextMenuListener, removeContextMenuListener, addMouseWheelListener, removeMouseWheelListener, addStylusListener, removeStylusListener, mouseWheel, paintRippleOverlay, removePointerPressedListener, removeLongPressListener, removeDragFinishedListener, addPointerReleasedListener, removePointerReleasedListener, addPointerDraggedListener, removePointerDraggedListener, getDragSpeed, getStyle, getPressedStyle, setPressedStyle, initUnselectedStyle, initPressedStyle, initDisabledStyle, initSelectedStyle, getUnselectedStyle, setUnselectedStyle, getSelectedStyle, setSelectedStyle, getDisabledStyle, setDisabledStyle, installDefaultPainter, requestFocus, toString, refreshTheme, refreshTheme, isDragActivated, animate, scrollRectToVisible, scrollRectToVisible, paintBorder, paintBorderBackground, isCellRenderer, isScrollVisible, setScrollVisible, setIsScrollVisible, startEditingAsync, stopEditing, isEditing, isEditable, laidOut, deinitialize, initComponent, isInitialized, setInitialized, styleChanged, getNextFocusDown, setNextFocusDown, getNextFocusUp, setNextFocusUp, getNextFocusLeft, setNextFocusLeft, getNextFocusRight, setNextFocusRight, getName, setName, initCustomStyle, deinitializeCustomStyle, isRTL, setRTL, isTactileTouch, isTactileTouch, setTactileTouch, getPropertyNames, getPropertyTypes, getPropertyTypeNames, getPropertyValue, setPropertyValue, paintLockRelease, paintLock, isSnapToGrid, setSnapToGrid, shouldBlockSideSwipe, shouldBlockSideSwipeLeft, shouldBlockSideSwipeRight, blocksSideSwipe, isFlatten, setFlatten, getTensileLength, setTensileLength, isGrabsPointerEvents, setGrabsPointerEvents, getScrollOpacityChangeSpeed, setScrollOpacityChangeSpeed, growShrink, isAlwaysTensile, setAlwaysTensile, isDraggable, setDraggable, isDropTarget, setDropTarget, isChildOf, isHideInPortrait, setHideInPortrait, getBindablePropertyNames, getBindablePropertyTypes, bindProperty, unbindProperty, getBoundPropertyValue, setBoundPropertyValue, getCloudBoundProperty, setCloudBoundProperty, getCloudDestinationProperty, setCloudDestinationProperty, getComponentState, setComponentState, setHidden, isHidden, setHidden, isHidden, announceForAccessibility, getAccessibilityText, setAccessibilityText, getSemantics, getAccessibilityNode, accessibilityChanged, accessibilityChanged, getTooltip, setTooltip
Constructor details
Container
public Container(Layout layout, String uiid)Parameters
layoutLayout- the specified layout manager
uiidString- the uiid of the container
Container
public Container(Layout layout)Parameters
layoutLayout- the specified layout manager
Container
public Container()FlowLayout.Method details
encloseIn
public static Container encloseIn(Layout l, Component cmp, Object cons)Parameters
lLayout- the layout
cmpComponent- the component to enclose
consObject- the constraint for the component
Returns
encloseIn
public static Container encloseIn(Layout l, Component... cmp)Parameters
lLayout- the layout
cmpComponent...- the components to enclose
Returns
initLaf
protected void initLaf(UIManager uim)getUIManager
public UIManager getUIManager()Returns
setUIManager
public void setUIManager(UIManager uiManager)Parameters
uiManagerUIManager- UIManager instance
isSurface
public boolean isSurface()Returns
add
public final Container add(Component cmp)Parameters
cmpComponent- the component to add
Returns
addAll
public Container addAll(Component... cmps)Parameters
cmpsComponent...- the other components to add
Returns
add
public Container add(Object constraint, Component cmp)Parameters
constraintObject- the layout constraint if applicable
cmpComponent- the component to add
Returns
add
public Container add(String label)Parameters
labelString- a string that will be wrapped as a label, this is equivalent to calling add(new Label(l))
Returns
add
public Container add(Image img)Parameters
imgImage- an image that will be wrapped as a label, this is equivalent to calling add(new Label(l))
Returns
add
public Container add(Object constraint, String label)Parameters
constraintObject- the layout constraint if applicable
labelString- a component that will be wrapped as a label, this is equivalent to calling add(new Label(l))
Returns
add
public Container add(Object constraint, Image img)Parameters
constraintObject- the layout constraint if applicable
imgImage- an image that will be wrapped as a label, this is equivalent to calling add(new Label(l))
Returns
getLeadComponent
public Component getLeadComponent()Returns
setLeadComponent
public final void setLeadComponent(Component lead)Parameters
leadComponent- component that takes over the hierarchy
getLeadParent
public Container getLeadParent()Returns
keyPressed
public void keyPressed(int k)Parameters
kint- the key code value to indicate a physical key.
keyReleased
public void keyReleased(int k)Parameters
kint- the key code value to indicate a physical key.
getLayout
public Layout getLayout()Returns
setLayout
public void setLayout(Layout layout)Parameters
layoutLayout- the specified layout manager
invalidate
public void invalidate()setShouldLayout
protected void setShouldLayout(boolean layout)setShouldCalcPreferredSize
public void setShouldCalcPreferredSize(boolean shouldCalcPreferredSize)Parameters
shouldCalcPreferredSizeboolean- indicate whether this component need to recalculate his preferred size
getLayoutWidth
public int getLayoutWidth()Returns
getLayoutHeight
public int getLayoutHeight()Returns
applyRTL
public void applyRTL(boolean rtl)Parameters
rtlboolean- right to left bidi indication
See also
constrainWidthWhenScrollable
protected boolean constrainWidthWhenScrollable()Returns
constrainHeightWhenScrollable
protected boolean constrainHeightWhenScrollable()Returns
addComponent
public void addComponent(Component cmp)Parameters
cmpComponent- the component to be added
addComponent
public void addComponent(Object constraints, Component cmp)Parameters
constraintsObject- this method is useful when the Layout requires a constraint such as the BorderLayout. In this case you need to specify an additional data when you add a Component, such as “CENTER”, “NORTH”…
cmpComponent- component to add
addComponent
public void addComponent(int index, Object constraints, Component cmp)Parameters
indexint- location to insert the Component
constraintsObject- this method is useful when the Layout requires a constraint such as the BorderLayout. In this case you need to specify an additional data when you add a Component, such as “CENTER”, “NORTH”…
cmpComponent- component to add
addComponent
public void addComponent(int index, Component cmp)Parameters
indexint- location to insert the Component
cmpComponent- the Component to add
Throws
ArrayIndexOutOfBoundsException- if index is out of bounds
IllegalArgumentException- if Component is already contained or the cmp is a Form Component
replaceAndWait
public void replaceAndWait(Component current, Component next, Transition t)Parameters
currentComponent- a Component to remove from the Container
nextComponent- a Component that replaces the current Component
tTransition- a Transition between the add and removal of the Components a Transition can be null
replaceAndWait
public void replaceAndWait(Component current, Component next, Transition t, int layoutAnimationSpeed)Parameters
currentComponent- a Component to remove from the Container
nextComponent- a Component that replaces the current Component
tTransition- a Transition between the add and removal of the Components a Transition can be null
layoutAnimationSpeedint- the speed of the layout animation after replace is completed
replace
public void replace(Component current, Component next, Transition t, Runnable onFinish, int growSpeed)Parameters
currentComponent- a Component to remove from the Container
nextComponent- a Component that replaces the current Component
tTransition- a Transition between the add and removal of the Components a Transition can be null
onFinishRunnable- invoked when the replace operation is completed, may be null
growSpeedint- after replace is completed the component can gradually grow/shrink to fill up available room, set this to 0 for immediate growth or any larger number for gradual animation. -1 indicates a special case where no validation occurs
replaceAndWait
public void replaceAndWait(Component current, Component next, Transition t, boolean dropEvents)Parameters
currentComponent- a Component to remove from the Container
nextComponent- a Component that replaces the current Component
tTransition- a Transition between the add and removal of the Components a Transition can be null
dropEventsboolean- indicates if the display should drop all events while this Component replacing is happening
replace
public void replace(Component current, Component next, Transition t)Parameters
currentComponent- a Component to remove from the Container
nextComponent- a Component that replaces the current Component
tTransition- a Transition between the add and removal of the Components a Transition can be null
createReplaceTransition
public ComponentAnimation createReplaceTransition(Component current, Component next, Transition t)Parameters
currentComponent- a Component to remove from the Container
nextComponent- a Component that replaces the current Component
tTransition- a Transition between the add and removal of the Components a Transition can be null
Returns
isEnabled
public boolean isEnabled()Returns
setEnabled
public void setEnabled(boolean enabled)removeComponent
public void removeComponent(Component cmp)Parameters
cmpComponent- the removed component
cancelRepaints
protected void cancelRepaints()flushReplace
public void flushReplace()removeAll
public void removeAll()revalidateWithAnimationSafety
public void revalidateWithAnimationSafety()#revalidate()
on a container while an animation is in progress, it will produce
paint artifacts as it will insert frames in the animation with
the container at its final position. Using this method, it will
wait until running animations are complete before it revalidates.revalidate
public void revalidate()revalidateLater
public void revalidateLater()#revalidate() and #revalidateWithAnimationSafety()
if you don’t need the revalidate (layout and repaint) to happen immediately,
but you do want it to happen before the next paint. This is can be far more
efficient as it will squash the revalidation calls into the minimal set
of containers that require revalidation, so that the system doesn’t end up
revalidating the same container multiple times between paints.forceRevalidate
public void forceRevalidate()clearClientProperties
public void clearClientProperties()paint
public void paint(Graphics g)Parameters
gGraphics- the component graphics
paintGlass
protected void paintGlass(Graphics g)Parameters
gGraphics- the graphics context
layoutContainer
public void layoutContainer()isSafeArea
public boolean isSafeArea()Checks if this container is a “safe area”. A “safe area” is a container whose contents will always be displayed inside the device’s “safe display area”.
This feature was added primarily for the iPhone X which covers some parts of the screen and would cover or interfere with any content drawn in those regions. In particular, the notch, the rounded corners, and the task bar cover portions of the screen.
A container that is a safe area will automatically add appropriate padding on layout so that its children will be rendered completely in the safe area of the screen. This only applies if the container has no scrollable parents. If a “safe” container has scrollable parents, then it is assumed that the user can just scroll it into a safe area.
Returns
setSafeArea
public void setSafeArea(boolean safeArea)Marks this container as a “safe area”, meaning that it will automatically supply sufficient padding as necessary for its children to be laid out inside the safe area of the screen.
This was primarily added for the iPhone X which covers portions of the screen and may interfere with components that are rendered there.
The “safe” area is calculated against a “safe area root”’s bounds, which is
the parent form by default. In some cases it may be helpful to make the root
a sub-container, such as if you need to lay a component out off-screen. See
#setSafeAreaRoot(boolean) for more details.
Parameters
safeAreaboolean- True to make this container a safe area.
isSafeAreaRoot
public boolean isSafeAreaRoot()Checks if this container is a safe area root. A safe area root is a container against whose bounds, safe area margins are calculated for child components.
Forms are safe area roots by default.
See also
getSafeAreaRoot
public Container getSafeAreaRoot()Gets the Safe area “root” container for this container. This method will walk
up the component hierarchy until is finds a Container with #isSafeAreaRoot() true.
Forms are safe area roots by default, but it is possible to mark other containers as safe area roots.
A safe area root is a container from which safe area margins are applied when calculating the safe areas of child components. Setting a root can facilitate the layout of a container’s children before it appears on the screen.
setSafeAreaRoot
public void setSafeAreaRoot(boolean root)Set whether this container is a safe area root. A safe area root is a container against whose bounds, safe area margins are calculated for child components.
Safe Area root vs Safe Area
A Safe Area root is not actually a safe area. It will lay out its children normally, without any adjustments to padding to accommodate the display safe area. They are rather used by safe area child containers to calculate safe area margins, according to if the safe area root container spanned the entire screen
In most cases you don’t need to explicitly set a safe area root, since Forms are marked as roots by default. However, there are edge cases where components may be initially laid out off-screen (in which safe areas are not applied), but are transitioned in. Once on the screen, the safe margins would be applied which may cause an abrupt re-layout at the moment that the safe margins are applied. This edge case occurs in, for example, a side menu bar which is rendered off-screen. By making the side menu bar container a “root” itself, the safe areas will be applied to the layout, even when the menu is off-screen. Then there is no “jerk” when it transitions in.
Parameters
rootboolean- True to make this a root. False to make it “not” a root.
See also
getComponentCount
public int getComponentCount()Returns
getComponentAt
public Component getComponentAt(int index)Parameters
indexint- of the Component you wish to get
Returns
Throws
ArrayIndexOutOfBoundsException- if an invalid index was given.
getComponentIndex
public int getComponentIndex(Component cmp)Parameters
cmpComponent- the component to search for
Returns
contains
public boolean contains(Component cmp)Parameters
cmpComponent- a Component to check
Returns
scrollComponentToVisible
public void scrollComponentToVisible(Component c)Parameters
cComponent- the component that will be scrolling for visibility
getClosestComponentTo
public Component getClosestComponentTo(int x, int y)Parameters
xint- location in container relative coordinates
yint- location in container relative coordinates
Returns
getResponderAt
public Component getResponderAt(int x, int y)Returns the top-most component that responds to pointer events at absolute coordinate (x, y). This may return null if there are no components at this coordinate that respond to pointer events.
Note: This method is stricter than int)
about which component is returned. Whereas int) will return
this when there are no matches, as long as it contains (x, y), int)
will return null in this case. int) may also return components
that are not visible or are not enabled. In generaly, if you are trying to retrieve a component
that responds to pointer events, you should use this method over int) unless
you have a good reason and really know what you are doing.
Parameters
xint- Absolute x-coordinate.
yint- Absolute y-coordinate.
Returns
getComponentAt
public Component getComponentAt(int x, int y)Returns a Component at coordinate (x, y).
WARNING: This method may return components that are disabled,
or invisible, or that do not respond to pointer events. If you are looking for the
top-most component that responds to pointer events, you should use int)
as it is guaranteed to return a component with Component#respondsToPointerEvents() true;
or null if none is found at the coordinate.
Parameters
xint- absolute screen location
yint- absolute screen location
Returns
findDropTargetAt
public Component findDropTargetAt(int x, int y)Parameters
xint- position in which we are searching for a drop target
yint- position in which we are searching for a drop target
Returns
pointerPressed
public void pointerPressed(int x, int y)Parameters
xint- the pointer x coordinate
yint- the pointer y coordinate
calcPreferredSize
protected Dimension calcPreferredSize()Returns
paramString
protected String paramString()null.Returns
refreshTheme
public void refreshTheme(boolean merge)Parameters
mergeboolean- indicates if the current styles should be merged with the new styles
isScrollableX
public boolean isScrollableX()Returns
setScrollableX
public void setScrollableX(boolean scrollableX)Parameters
scrollableXboolean- whether the component should/could scroll on the X axis
isScrollableY
public boolean isScrollableY()Returns
setScrollableY
public void setScrollableY(boolean scrollableY)Parameters
scrollableYboolean- whether the component should/could scroll on the Y axis
getSideGap
public int getSideGap()Returns
getBottomGap
public int getBottomGap()Returns
setScrollable
public void setScrollable(boolean scrollable)Parameters
scrollableboolean- whether the component should/could scroll on the X and Y axis
setCellRenderer
public void setCellRenderer(boolean cellRenderer)Parameters
cellRendererboolean- indicate whether this component is currently being used as a cell renderer
getScrollIncrement
public int getScrollIncrement()Returns
setScrollIncrement
public void setScrollIncrement(int scrollIncrement)Parameters
scrollIncrementint- the size in pixels.
findFirstFocusable
public Component findFirstFocusable()Returns
dragInitiated
protected void dragInitiated()fireClicked
protected void fireClicked()isSelectableInteraction
protected boolean isSelectableInteraction()Returns
getGridPosY
protected int getGridPosY()Returns
paintComponentBackground
public void paintComponentBackground(Graphics g)Parameters
gGraphics- the graphics context.
getGridPosX
protected int getGridPosX()Returns
animateHierarchyAndWait
public void animateHierarchyAndWait(int duration)Parameters
durationint- the duration in milliseconds for the animation
createAnimateHierarchy
public ComponentAnimation createAnimateHierarchy(int duration)Parameters
durationint- the duration in milliseconds for the animation
Returns
animateHierarchy
public void animateHierarchy(int duration)Parameters
durationint- the duration in milliseconds for the animation
animateHierarchyFadeAndWait
public void animateHierarchyFadeAndWait(int duration, int startingOpacity)Parameters
durationint- the duration in milliseconds for the animation
startingOpacityint- the initial opacity to give to the animated components
createAnimateHierarchyFade
public ComponentAnimation createAnimateHierarchyFade(int duration, int startingOpacity)Parameters
durationint- the duration in milliseconds for the animation
startingOpacityint- the initial opacity to give to the animated components
Returns
animateHierarchyFade
public void animateHierarchyFade(int duration, int startingOpacity)Parameters
durationint- the duration in milliseconds for the animation
startingOpacityint- the initial opacity to give to the animated components
animateLayoutFadeAndWait
public void animateLayoutFadeAndWait(int duration, int startingOpacity)Parameters
durationint- the duration in milliseconds for the animation
startingOpacityint- the initial opacity to give to the animated components
createAnimateLayoutFadeAndWait
public ComponentAnimation createAnimateLayoutFadeAndWait(int duration, int startingOpacity)Parameters
durationint- the duration in milliseconds for the animation
startingOpacityint- the initial opacity to give to the animated components
Returns
animateLayoutFade
public void animateLayoutFade(int duration, int startingOpacity)Parameters
durationint- the duration in milliseconds for the animation
startingOpacityint- the initial opacity to give to the animated components
createAnimateLayoutFade
public ComponentAnimation createAnimateLayoutFade(int duration, int startingOpacity)Parameters
durationint- the duration in milliseconds for the animation
startingOpacityint- the initial opacity to give to the animated components
Returns
animateLayoutAndWait
public void animateLayoutAndWait(int duration)Parameters
durationint- the duration in milliseconds for the animation
animateLayout
public void animateLayout(int duration)Animates a pending layout into place, this effectively replaces revalidate with a more visual form of animation
See:
Form hi = new Form("Layout Animations", new BoxLayout(BoxLayout.Y_AXIS));
Button fall = new Button("Fall");
fall.addActionListener((e) -> {
for(int iter = 0 ; iter < 10 ; iter++) {
Label b = new Label ("Label " + iter);
b.setWidth(fall.getWidth());
b.setHeight(fall.getHeight());
b.setY(-fall.getHeight());
hi.add(b);
}
hi.getContentPane().animateLayout(20000);
});
hi.add(fall);
Parameters
durationint- the duration in milliseconds for the animation
updateTabIndices
public int updateTabIndices(int offset)Parameters
offsetint- The starting tab index.
Returns
createAnimateLayout
public ComponentAnimation createAnimateLayout(int duration)Animates a pending layout into place, this effectively replaces revalidate with a more visual form of animation
See:
Form hi = new Form("Layout Animations", new BoxLayout(BoxLayout.Y_AXIS));
Button fall = new Button("Fall");
fall.addActionListener((e) -> {
for(int iter = 0 ; iter < 10 ; iter++) {
Label b = new Label ("Label " + iter);
b.setWidth(fall.getWidth());
b.setHeight(fall.getHeight());
b.setY(-fall.getHeight());
hi.add(b);
}
hi.getContentPane().animateLayout(20000);
});
hi.add(fall);
Parameters
durationint- the duration in milliseconds for the animation
Returns
drop
public void drop(Component dragged, int x, int y)Parameters
draggedComponent- the component being dropped
xint- the x coordinate of the drop
yint- the y coordinate of the drop
createAnimateMotion
protected Motion createAnimateMotion(int start, int destination, int duration)Parameters
startint- start value
destinationint- destination value
durationint- duration of animation
Returns
morph
public void morph(Component source, Component destination, int duration, Runnable onCompletion)Morph is similar to the replace functionality where a component might be replaced with a component that isn’t within the container. However, unlike the replace functionality which uses a transition and assumes the position of the component (and is hence quite flexible) morph can move and resize the component. E.g. after entering text into a text field and pressing submit it can “morph” into a chat bubble located in a different part of the screen.
It is the responsibility of the caller to remove the source component (if desired) and revalidate the container when the animation completes.
Parameters
sourceComponent- source component assumed to be within this container or one of its children
destinationComponent- the destination component
durationint- the time the morph operation should take
onCompletionRunnable- invoked when the morphing completes
morphAndWait
public void morphAndWait(Component source, Component destination, int duration)Morph is similar to the replace functionality where a component might be replaced with a component that isn’t within the container. However, unlike the replace functionality which uses a transition and assumes the position of the component (and is hence quite flexible) morph can move and resize the component. E.g. after entering text into a text field and pressing submit it can “morph” into a chat bubble located in a different part of the screen.
It is the responsibility of the caller to remove the source component (if desired) and revalidate the container when the animation completes.
Parameters
sourceComponent- source component assumed to be within this container or one of its children
destinationComponent- the destination component
durationint- the time the morph operation should take
animateUnlayout
public void animateUnlayout(int duration, int opacity, Runnable callback)This method is the exact reverse of animateLayout, when completed it leaves the container in an invalid state. It is useful to invoke this in order to remove a component, transition to a different form or provide some other interaction. E.g.:
Form hi = new Form("Layout Animations", new BoxLayout(BoxLayout.Y_AXIS));
Button fall = new Button("Fall");
fall.addActionListener((e) -> {
if(hi.getContentPane().getComponentCount() == 1) {
fall.setText("Rise");
for(int iter = 0 ; iter {
hi.removeAll();
hi.add(fall);
hi.revalidate();
});*/
}
});
hi.add(fall);
Parameters
durationint- the duration of the animation
opacityint- the opacity to which the layout will reach, allows fading out the components
callbackRunnable- if not null will be invoked when unlayouting is complete
animateUnlayoutAndWait
public void animateUnlayoutAndWait(int duration, int opacity)This method is the exact reverse of animateLayoutAndWait, when completed it leaves the container in an invalid state. It is useful to invoke this in order to remove a component, transition to a different form or provide some other interaction. E.g.:
Form hi = new Form("Layout Animations", new BoxLayout(BoxLayout.Y_AXIS));
Button fall = new Button("Fall");
fall.addActionListener((e) -> {
if(hi.getContentPane().getComponentCount() == 1) {
fall.setText("Rise");
for(int iter = 0 ; iter {
hi.removeAll();
hi.add(fall);
hi.revalidate();
});*/
}
});
hi.add(fall);
Parameters
durationint- the duration of the animation
opacityint- the opacity to which the layout will reach, allows fading out the components
createAnimateUnlayout
public ComponentAnimation createAnimateUnlayout(int duration, int opacity, Runnable callback)Parameters
durationint- the duration of the animation
opacityint- the opacity to which the layout will reach, allows fading out the components
callbackRunnable- Not documented.
Returns
getChildrenAsList
public List<Component> getChildrenAsList(boolean includeQueued)Gets the child components of this Container as a List. Using true as the argument provides a way to obtain all of the children, including children whose full addition is pending while an animation is in progress.
Animation Discussion: If children are added or removed from a Container while its containing Form has an animation in progress, the insertion/deletion isn’t complete until after the animation is finished. Most methods to interact with a container’s children won’t see these pending changes until that time. E.g.:
`// Assume an animation is in progress on the form containing cnt. Label lbl = new Label(“Test”); int len = cnt.getComponentCount(); // 0 cnt.addComponent(lbl); int lenAfter = cnt.getComponentCount(); // 0 cnt.contains(lbl); // true cnt.getChildrenAsList(true).size(); // 1 cnt.getChildrenAsList(false).size(); // 0
Button btn = new Button(“Press me”); cnt.addComponent(btn); cnt.getComponentCount(); // 0 cnt.getChildrenAsList(true).size(); // 2 cnt.removeComponent(btn); cnt.getComponentCount(); // 0 cnt.getChildrenAsList(true).size(); // 1
`
Parameters
includeQueuedboolean- True to reflect queued inserts and removals while an animation is in progress.
Returns
See also
iterator
public Iterator<Component> iterator(boolean includeQueued)Parameters
includeQueuedboolean- True to include queued component insertions and removals while animation is in progress.
Returns
iterator
public Iterator<Component> iterator()