Class FlowLayout
FlowLayout is the default layout manager for Codename One Containers and Forms. It places components in a row one after another based on their preferred size. When it reaches the edge of the container it will break a line and start a new row.
Form hi = new Form("Flow Layout", new FlowLayout());
hi.add(new Label("First")).
add(new Label("Second")).
add(new Label("Third")).
add(new Label("Fourth")).
add(new Label("Fifth"));
hi.show();
Since flow layout isn't a constraint based layout it has a bunch of very useful enclose methods that can significantly reduce the code required to create the same UI e.g.:
Container flowLayout = FlowLayout.encloseIn(new Label("First"),
new Label("Second"),
new Label("Third"),
new Label("Fourth"),
new Label("Fifth"));
This class works nicely for simple elements, however since Codename One doesn't reflow recursively (for performance) it can't accurately handle complex layouts. As a result when an element of varying size is placed in a flow layout this confuses the line breaking logic and fails in odd ways. That is why this layout should only be used for relatively simple use cases.
Flow layout supports aligning the component horizontally and vertically, it defaults to the top left alignment for
LTR languages. E.g. the following alignments are supported thru the usage of setAlign &
setValign.
E.g. you can align to the center
You can align to the right
You can align to the center and the middle horizontally
There are quite a few additional combinations that are possible with these API's.
-
Constructor Summary
ConstructorsConstructorDescriptionCreates a new instance of FlowLayout with left alignmentFlowLayout(int orientation) Creates a new instance of FlowLayout with the given orientation one of LEFT, RIGHT or CENTERFlowLayout(int orientation, int valign) Creates a new instance of FlowLayout with the given orientation one of LEFT, RIGHT or CENTER and the vertical orientationFlowLayout(int orientation, int valign, boolean vAlignByRow) Creates a new instance of FlowLayout with the given orientation one of LEFT, RIGHT or CENTER and the vertical orientation -
Method Summary
Modifier and TypeMethodDescriptionstatic ContainerencloseBottom(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.LEFT, Component.BOTTOM), cmps);static ContainerencloseBottomByRow(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.LEFT, Component.BOTTOM, true), cmps);static ContainerencloseCenter(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.CENTER), cmps);static ContainerencloseCenterBottom(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.CENTER, Component.BOTTOM), cmps);static ContainerencloseCenterBottomByRow(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.CENTER, Component.BOTTOM, true), cmps);static ContainerencloseCenterMiddle(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.CENTER, Component.CENTER), cmps);static ContainerencloseCenterMiddleByRow(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.CENTER, Component.CENTER, true), cmps);static ContainerShorthand forcom.codename1.ui.Component...)with aFlowLayout instancesee:static ContainerencloseLeftMiddle(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.LEFT, Component.CENTER), cmps);static ContainerencloseLeftMiddleByRow(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.LEFT, Component.CENTER, true), cmps);static ContainerencloseMiddle(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.LEFT, Component.CENTER), cmps);static ContainerencloseMiddleByRow(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.LEFT, Component.CENTER, true), cmps);static ContainerencloseRight(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.RIGHT), cmps);static ContainerencloseRightBottom(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.RIGHT, Component.BOTTOM), cmps);static ContainerencloseRightBottomByRow(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.RIGHT, Component.BOTTOM, true), cmps);static ContainerencloseRightMiddle(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.RIGHT, Component.CENTER), cmps);static ContainerencloseRightMiddleByRow(Component... cmps) Shorthand for Container.encloseIn(new FlowLayout(Component.RIGHT, Component.CENTER, true), cmps);booleanprotected voidThis method tries to fill up the available space in a row.intgetAlign()Alignment of the flow layout, defaults to LEFTgetPreferredSize(Container parent) Returns the container preferred sizeintIndicates vertical alignment within the flow layoutinthashCode()booleanIndicates whether the layout manager should try to fill up the available space in the rowbooleanReturns whether vertical alignment is done internally or externallyvoidlayoutContainer(Container parent) Layout the given parent container childrenvoidsetAlign(int orientation) Alignment of the flow layout, defaults to LEFTvoidsetFillRows(boolean fillRows) Indicates whether the layout manager should try to fill up the available space in the rowvoidsetValign(int valign) Indicates vertical alignment within the flow layoutvoidsetValignByRow(boolean internal) When set to true vertical alignment will be performed by row (components within the container will be aligned vertically to each other in the same row) When set to false (which is default) vertical alignment relates to the alignment of this container in regards to external componentstoString()
-
Constructor Details
-
FlowLayout
public FlowLayout()Creates a new instance of FlowLayout with left alignment -
FlowLayout
public FlowLayout(int orientation) Creates a new instance of FlowLayout with the given orientation one of LEFT, RIGHT or CENTER
Parameters
orientation: the orientation value
-
FlowLayout
public FlowLayout(int orientation, int valign) Creates a new instance of FlowLayout with the given orientation one of LEFT, RIGHT or CENTER and the vertical orientation
Parameters
-
orientation: the orientation value -
valign: the vertical orientation one of Component.TOP/BOTTOM/CENTER
-
-
FlowLayout
public FlowLayout(int orientation, int valign, boolean vAlignByRow) Creates a new instance of FlowLayout with the given orientation one of LEFT, RIGHT or CENTER and the vertical orientation
Parameters
-
orientation: the orientation value -
valign: the vertical orientation one of Component.TOP/BOTTOM/CENTER -
vAlignByRow: whether vertical alignment should be computed by row elements
-
-
-
Method Details
-
encloseIn
Shorthand for
com.codename1.ui.Component...)with aFlowLayout instancesee:Container flowLayout = FlowLayout.encloseIn(new Label("First"), new Label("Second"), new Label("Third"), new Label("Fourth"), new Label("Fifth"));Parameters
cmps: the components to enclose in a new container
Returns
the new container
-
encloseCenter
-
encloseRight
-
encloseMiddle
-
encloseMiddleByRow
-
encloseCenterMiddle
-
encloseCenterMiddleByRow
-
encloseRightMiddle
-
encloseRightMiddleByRow
-
encloseLeftMiddle
-
encloseLeftMiddleByRow
-
encloseBottom
-
encloseCenterBottom
-
encloseRightBottom
-
encloseBottomByRow
-
encloseCenterBottomByRow
-
encloseRightBottomByRow
-
layoutContainer
Layout the given parent container children
Parameters
parent: the given parent container
- Specified by:
layoutContainerin classLayout
-
fillRow
This method tries to fill up the available space in a row. This method is called if isFillRows() returns true.
Parameters
-
target: the parent container -
width: the width of the row to fill -
start: the index of the first component in this row -
end: the index of the last component in this row
-
-
getPreferredSize
Returns the container preferred size
Parameters
parent: the parent container
Returns
the container preferred size
- Specified by:
getPreferredSizein classLayout
-
toString
-
isFillRows
public boolean isFillRows()Indicates whether the layout manager should try to fill up the available space in the row
Returns
the fillRows
-
setFillRows
public void setFillRows(boolean fillRows) Indicates whether the layout manager should try to fill up the available space in the row
Parameters
fillRows: the fillRows to set
-
getValign
public int getValign()Indicates vertical alignment within the flow layout
Returns
Component.TOP/BOTTOM/CENTER
-
setValign
public void setValign(int valign) Indicates vertical alignment within the flow layout
Parameters
valign: one of Component.TOP/BOTTOM/CENTER
-
isValignByRow
public boolean isValignByRow()Returns whether vertical alignment is done internally or externally
Returns
whether vertical alignment is done internally or externally
-
setValignByRow
public void setValignByRow(boolean internal) When set to true vertical alignment will be performed by row (components within the container will be aligned vertically to each other in the same row) When set to false (which is default) vertical alignment relates to the alignment of this container in regards to external components
Parameters
internal: true for internal, false otherwise
-
getAlign
public int getAlign()Alignment of the flow layout, defaults to LEFT
Returns
the orientation
-
setAlign
public void setAlign(int orientation) Alignment of the flow layout, defaults to LEFT
Parameters
orientation: the orientation to set
-
equals
-
hashCode
-