public final class RoundRectBorder

  1. Object
  2. Border
  3. RoundRectBorder

Customizable rounded rectangle border that breaks down the border into customizable pieces.

The background is inherited from the parent UIID but stroke and shadow can be customized via user settings.

IMPORTANT: RoundRectBorder instances can’t be reused you would need to create a separate instance for each style object! See this issue for further details.

Form hi = new Form("RoundRect", new BorderLayout(BorderLayout.CENTER_BEHAVIOR_CENTER));

Button ok = new Button("OK");
Button cancel = new Button("Cancel");

Label loginLabel = new Label("Login", "Container");
loginLabel.getAllStyles().setAlignment(Component.CENTER);

Label passwordLabel = new Label("Password", "Container");
passwordLabel.getAllStyles().setAlignment(Component.CENTER);

TextField login = new TextField("", "Login", 20, TextArea.ANY);
TextField password = new TextField("", "Password", 20, TextArea.PASSWORD);
Style loginStyle = login.getAllStyles();
Stroke borderStroke = new Stroke(2, Stroke.CAP_SQUARE, Stroke.JOIN_MITER, 1);
loginStyle.setBorder(RoundRectBorder.create().
        strokeColor(0).
        strokeOpacity(120).
        stroke(borderStroke));
loginStyle.setBgColor(0xffffff);
loginStyle.setBgTransparency(255);
loginStyle.setMarginUnit(Style.UNIT_TYPE_DIPS);
loginStyle.setMargin(Component.BOTTOM, 3);
Style passwordStyle = password.getAllStyles();
passwordStyle.setBorder(RoundRectBorder.create().
        strokeColor(0).
        strokeOpacity(120).
        stroke(borderStroke));
passwordStyle.setBgColor(0xffffff);
passwordStyle.setBgTransparency(255);

Container box = BoxLayout.encloseY(
        loginLabel,
        login,
        passwordLabel,
        password,
            GridLayout.encloseIn(2, cancel, ok));

Button closeButton = new Button();
Style closeStyle = closeButton.getAllStyles();
closeStyle.setFgColor(0xffffff);
closeStyle.setBgTransparency(0);
closeStyle.setPaddingUnit(Style.UNIT_TYPE_DIPS);
closeStyle.setPadding(3, 3, 3, 3);
closeStyle.setBorder(RoundBorder.create().shadowOpacity(100));
FontImage.setMaterialIcon(closeButton, FontImage.MATERIAL_CLOSE);

Container layers = LayeredLayout.encloseIn(box, FlowLayout.encloseRight(closeButton));
Style boxStyle = box.getUnselectedStyle();
boxStyle.setBgTransparency(255);
boxStyle.setBgColor(0xeeeeee);
boxStyle.setMarginUnit(Style.UNIT_TYPE_DIPS);
boxStyle.setPaddingUnit(Style.UNIT_TYPE_DIPS);
boxStyle.setMargin(4, 3, 3, 3);
boxStyle.setPadding(2, 2, 2, 2);

hi.add(BorderLayout.CENTER, layers);

hi.show();

Methods

public static RoundRectBorder create()Creates a flat border with styles derived from the component UIID
public RoundRectBorder arrowSize(float size)Change the size of the arrow used for component tracking.
public void setArrowSize(float size)Change the size of the arrow used for component tracking.
public RoundRectBorder strokeOpacity(int strokeOpacity)Sets the opacity of the stroke line around the border
public RoundRectBorder trackComponentSide(int side)Explicitly positions the arrow used for component tracking to a particular side of the border.
public int getTrackComponentSide()Gets the side that the tracking component should be displayed on if using explicit placement.
public RoundRectBorder trackComponentVerticalPosition(float pos)Explicitly sets the vertical position of the tracking arrow.
public float getTrackComponentVerticalPosition()Gets the explicitly set vertical position of the tracking arrow.
public RoundRectBorder trackComponentHorizontalPosition(float pos)Explicitly sets the horizontal position of the tracking arrow.
public float getTrackComponentHorizontalPosition()Gets the explicitly set horizontal position of the tracking arrow.
public RoundRectBorder useCache(boolean useCache)Sets whether this RoundRectBorder instance should cache the border as a background image.
public boolean isUseCache()Checks whether this RoundRectBorder instance caches the border as a background image.
public RoundRectBorder strokeColor(int strokeColor)Sets the stroke color of the border
public RoundRectBorder stroke(Stroke stroke)Sets the stroke of the border
public RoundRectBorder stroke(float stroke, boolean mm)Sets the stroke of the border
public RoundRectBorder shadowSpread(float shadowSpread)Sets the spread of the shadow in millimeters i.e how much bigger is it than the actual border
public RoundRectBorder shadowSpread(int shadowSpread)Sets the spread in pixels of the shadow i.e how much bigger is it than the actual border
public RoundRectBorder shadowOpacity(int shadowOpacity)Sets the opacity of the shadow from 0 - 255 where 0 means no shadow and 255 means opaque black shadow
public RoundRectBorder shadowColor(int shadowColor)Sets the color of the shadow as an RRGGBB color
public RoundRectBorder shadowX(float shadowX)The position of the shadow on the X axis where 0.5f means the center and higher values draw it to the right side
public RoundRectBorder shadowY(float shadowY)The position of the shadow on the Y axis where 0.5f means the center and higher values draw it to the bottom
public RoundRectBorder shadowBlur(float shadowBlur)The blur on the shadow this is the standard Gaussian blur radius
public RoundRectBorder cornerRadius(float cornerRadius)The radius of the corners in millimeters
public RoundRectBorder bezierCorners(boolean bezierCorners)True if the corners are Bezier curves, otherwise the corners are drawn as a regular arc
public RoundRectBorder cssBoxModel(boolean cssBoxModel)Makes this border follow the CSS box model when the component is measured.
public boolean isCssBoxModel()True if this border is measured according to the CSS box model
public RoundRectBorder topLeftMode(boolean topLeft)True to draw the top left corner rounded, false to draw it as a corner
public RoundRectBorder topRightMode(boolean topRight)True to draw the top right corner rounded, false to draw it as a corner
public RoundRectBorder bottomLeftMode(boolean bottomLeft)True to draw the bottom left corner rounded, false to draw it as a corner
public RoundRectBorder bottomRightMode(boolean bottomRight)True to draw the bottom right corner rounded, false to draw it as a corner
public RoundRectBorder topOnlyMode(boolean topOnlyMode)Special mode where only the top of the round rectangle is rounded and the bottom is a regular rectangle
public RoundRectBorder bottomOnlyMode(boolean bottomOnlyMode)Special mode where only the bottom of the round rectangle is rounded and the top is a regular rectangle
public void paintBorderBackground(Graphics g, Component c)Has effect when the border demands responsibility for background painting normally the painter will perform this work but in this case the border might do it instead.
public int getMinimumHeight()Returns the minimum size required to properly display this border, normally this is 0 but a border might deem itself undisplayable with too small a size e.g. for the case of an image border the minimum height would be top + bottom and the m…
public int getMinimumWidth()Returns the minimum size required to properly display this border, normally this is 0 but a border might deem itself undisplayable with too small a size e.g. for the case of an image border the minimum height would be top + bottom and the m…
public boolean isBackgroundPainter()Returns true if installing this border will override the painting of the component background
public int getStrokeColor()The color of the edge of the border if applicable
public int getStrokeOpacity()The opacity of the edge of the border if applicable
public float getStrokeThickness()The thickness of the edge of the border if applicable, 0 if no stroke is needed
public boolean isStrokeMM()True if the thickness of the stroke is in millimeters
public boolean isBezierCorners()True if the corners are bezier curves, otherwise the corners are drawn as a regular arc
public float getShadowSpread()The spread of the shadow in pixels of millimeters
public int getShadowOpacity()The opacity of the shadow between 0 and 255
public int getShadowColor()The color of the shadow as an RRGGBB color
public float getShadowX()X axis bias of the shadow between 0 and 1 where 0 is to the top and 1 is to the bottom, defaults to 0.5
public float getShadowY()Y axis bias of the shadow between 0 and 1 where 0 is to the left and 1 is to the right, defaults to 0.5
public float getShadowBlur()The Gaussian blur size
public float getCornerRadius()The radius of the corners in millimeters
public boolean isTopOnlyMode()Special mode where only the top of the round rectangle is rounded and the bottom is a regular rectangle
public boolean isBottomOnlyMode()Special mode where only the bottom of the round rectangle is rounded and the top is a regular rectangle
public boolean equals(Object obj){Indicates whether some other object is “equal to” this one.
public int hashCode()Returns a hash code value for the object.
public boolean isTopLeft()Returns true if this border corner is round and false if it’s square
public boolean isTopRight()Returns true if this border corner is round and false if it’s square
public boolean isBottomLeft()Returns true if this border corner is round and false if it’s square
public boolean isBottomRight()Returns true if this border corner is round and false if it’s square

Inherited methods

Method details

create

public static RoundRectBorder create()
Creates a flat border with styles derived from the component UIID

Returns

a border instance

arrowSize

public RoundRectBorder arrowSize(float size)
Change the size of the arrow used for component tracking.

Parameters

size float
Size of arrow in millimeters.

Returns

a border instance

setArrowSize

public void setArrowSize(float size)
Change the size of the arrow used for component tracking.

Parameters

size float
Size of arrow in millimeters.

strokeOpacity

public RoundRectBorder strokeOpacity(int strokeOpacity)
Sets the opacity of the stroke line around the border

Parameters

strokeOpacity int
the opacity from 0-255 where 255 is completely opaque

Returns

border instance so these calls can be chained

trackComponentSide

public RoundRectBorder trackComponentSide(int side)
Explicitly positions the arrow used for component tracking to a particular side of the border. This can be used to override the default positioning, which is to place the arrow according to the position of the tracking component (#setTrackComponent(com.codename1.ui.geom.Rectangle)). Use in conjunction with #trackComponentHorizontalPosition(float), and #trackComponentHorizontalPosition.

Parameters

side int
The side to place the tracking arrow on. Values Component#TOP, Component#BOTTOM, Component#LEFT, or Component#BOTTOM. Set negative value for default behaviour, which is to just calculate the arrow position based on the tracking component bounds.

Returns

Self for chaining.

getTrackComponentSide

public int getTrackComponentSide()
Gets the side that the tracking component should be displayed on if using explicit placement.

Returns

The side that the arrow should be rendered on. Values Component#TOP, Component#BOTTOM, Component#LEFT, or a negative number to indicate that the position will be calculated based on the position of the tracking component. or Component#BOTTOM.

trackComponentVerticalPosition

public RoundRectBorder trackComponentVerticalPosition(float pos)
Explicitly sets the vertical position of the tracking arrow. This can be used to override the default positioning, which is to place the arrow according to the position of the tracking component (#setTrackComponent(com.codename1.ui.geom.Rectangle)).

Parameters

pos float
Vertical position of the arrow. Values between 0 and 1 will place the arrow in the range from top to bottom. Negative values result in default behaviour, which is to calculate the position based on the tracking component position.

Returns

Self for chainging.

getTrackComponentVerticalPosition

public float getTrackComponentVerticalPosition()
Gets the explicitly set vertical position of the tracking arrow. This can be used to override the default positioning, which is to place the arrow according to the position of the tracking component (#setTrackComponent(com.codename1.ui.geom.Rectangle)).

Returns

Vertical position of the arrow. Values between 0 and 1 will place the arrow in the range from top to bottom. Negative values result in default behaviour, which is to calculate the position based on the tracking component position.

trackComponentHorizontalPosition

public RoundRectBorder trackComponentHorizontalPosition(float pos)
Explicitly sets the horizontal position of the tracking arrow. This can be used to override the default positioning, which is to place the arrow according to the position of the tracking component (#setTrackComponent(com.codename1.ui.geom.Rectangle)).

Parameters

pos float
Vertical position of the arrow. Values between 0 and 1 will place the arrow in the range from left to right. Negative values result in default behaviour, which is to calculate the position based on the tracking component position.

Returns

Self for chainging.

getTrackComponentHorizontalPosition

public float getTrackComponentHorizontalPosition()
Gets the explicitly set horizontal position of the tracking arrow. This can be used to override the default positioning, which is to place the arrow according to the position of the tracking component (#setTrackComponent(com.codename1.ui.geom.Rectangle)).

Returns

Vertical position of the arrow. Values between 0 and 1 will place the arrow in the range from left to right. Negative values result in default behaviour, which is to calculate the position based on the tracking component position.

useCache

public RoundRectBorder useCache(boolean useCache)

Sets whether this RoundRectBorder instance should cache the border as a background image.

This setting is on by default, but can be turned off, as some older, low-memory devices may run into memory trouble if it is using a lot of RoundRectBorders. Turn the cache off for low-memory devices.

NOTE: Using the cache is required for gaussian blur to work. If cache is disabled, then gaussian blur settings will be ignored.

Parameters

useCache boolean
True to cache the border as a mutable image on the Component.

Returns

Self for chaining.

isUseCache

public boolean isUseCache()
Checks whether this RoundRectBorder instance caches the border as a background image.

strokeColor

public RoundRectBorder strokeColor(int strokeColor)
Sets the stroke color of the border

Parameters

strokeColor int
the color

Returns

border instance so these calls can be chained

stroke

public RoundRectBorder stroke(Stroke stroke)
Sets the stroke of the border

Parameters

stroke Stroke
the stroke object

Returns

border instance so these calls can be chained

stroke

public RoundRectBorder stroke(float stroke, boolean mm)
Sets the stroke of the border

Parameters

stroke float
the thickness of the stroke object
mm boolean
set to true to indicate the value is in millimeters, false indicates pixels

Returns

border instance so these calls can be chained

shadowSpread

public RoundRectBorder shadowSpread(float shadowSpread)
Sets the spread of the shadow in millimeters i.e how much bigger is it than the actual border

Parameters

shadowSpread float
the amount in millimeters representing the size of the shadow

Returns

border instance so these calls can be chained

shadowSpread

public RoundRectBorder shadowSpread(int shadowSpread)
Sets the spread in pixels of the shadow i.e how much bigger is it than the actual border

Parameters

shadowSpread int
the amount in pixels representing the size of the shadow

Returns

border instance so these calls can be chained

shadowOpacity

public RoundRectBorder shadowOpacity(int shadowOpacity)
Sets the opacity of the shadow from 0 - 255 where 0 means no shadow and 255 means opaque black shadow

Parameters

shadowOpacity int
the opacity of the shadow

Returns

border instance so these calls can be chained

shadowColor

public RoundRectBorder shadowColor(int shadowColor)
Sets the color of the shadow as an RRGGBB color

Parameters

shadowColor int
the color of the shadow

Returns

border instance so these calls can be chained

shadowX

public RoundRectBorder shadowX(float shadowX)
The position of the shadow on the X axis where 0.5f means the center and higher values draw it to the right side

Parameters

shadowX float
the position of the shadow between 0 - 1 where 0 equals left and 1 equals right

Returns

border instance so these calls can be chained

shadowY

public RoundRectBorder shadowY(float shadowY)
The position of the shadow on the Y axis where 0.5f means the center and higher values draw it to the bottom

Parameters

shadowY float
the position of the shadow between 0 - 1 where 0 equals top and 1 equals bottom

Returns

border instance so these calls can be chained

shadowBlur

public RoundRectBorder shadowBlur(float shadowBlur)
The blur on the shadow this is the standard Gaussian blur radius

Parameters

shadowBlur float
The blur on the shadow this is the standard Gaussian blur radius

Returns

border instance so these calls can be chained

cornerRadius

public RoundRectBorder cornerRadius(float cornerRadius)
The radius of the corners in millimeters

Parameters

cornerRadius float
the radius value

Returns

border instance so these calls can be chained

bezierCorners

public RoundRectBorder bezierCorners(boolean bezierCorners)
True if the corners are Bezier curves, otherwise the corners are drawn as a regular arc

Parameters

bezierCorners boolean
true if the corners use a bezier curve for drawing

Returns

border instance so these calls can be chained

cssBoxModel

public RoundRectBorder cssBoxModel(boolean cssBoxModel)

Makes this border follow the CSS box model when the component is measured.

By default a RoundRectBorder reports a minimum size of twice the corner radius (see getMinimumHeight()), which grows the component so a fully rounded “pill” always fits. That is the behavior hand written code and the designer rely on, but it is not how CSS behaves: in CSS border-radius never contributes to the size of the box, it is simply scaled down when the box is too small to fit it. This flag only changes the reported minimum size; scaling the radius down to fit the component it is actually given happens in both modes.

Borders generated by the CSS compiler enable this mode so a rule such as border-radius: 0 3mm 3mm 0 renders with the padding the stylesheet asked for instead of a component inflated to 6mm tall.

Parameters

cssBoxModel boolean
true to measure like CSS, false for the legacy pill sizing

Returns

border instance so these calls can be chained

isCssBoxModel

public boolean isCssBoxModel()
True if this border is measured according to the CSS box model

Returns

the cssBoxModel value

topLeftMode

public RoundRectBorder topLeftMode(boolean topLeft)
True to draw the top left corner rounded, false to draw it as a corner

Parameters

topLeft boolean
true for round false for sharp

Returns

border instance so these calls can be chained

topRightMode

public RoundRectBorder topRightMode(boolean topRight)
True to draw the top right corner rounded, false to draw it as a corner

Parameters

topRight boolean
true for round false for sharp

Returns

border instance so these calls can be chained

bottomLeftMode

public RoundRectBorder bottomLeftMode(boolean bottomLeft)
True to draw the bottom left corner rounded, false to draw it as a corner

Parameters

bottomLeft boolean
true for round false for sharp

Returns

border instance so these calls can be chained

bottomRightMode

public RoundRectBorder bottomRightMode(boolean bottomRight)
True to draw the bottom right corner rounded, false to draw it as a corner

Parameters

bottomRight boolean
true for round false for sharp

Returns

border instance so these calls can be chained

topOnlyMode

public RoundRectBorder topOnlyMode(boolean topOnlyMode)
Special mode where only the top of the round rectangle is rounded and the bottom is a regular rectangle

Parameters

topOnlyMode boolean
new value for top only mode

Returns

border instance so these calls can be chained

bottomOnlyMode

public RoundRectBorder bottomOnlyMode(boolean bottomOnlyMode)
Special mode where only the bottom of the round rectangle is rounded and the top is a regular rectangle

Parameters

bottomOnlyMode boolean
new value for bottom only mode

Returns

border instance so these calls can be chained

paintBorderBackground

public void paintBorderBackground(Graphics g, Component c)
Has effect when the border demands responsibility for background painting normally the painter will perform this work but in this case the border might do it instead.

Parameters

g Graphics
graphics context to draw onto
c Component
component whose border should be drawn

getMinimumHeight

public int getMinimumHeight()
Returns the minimum size required to properly display this border, normally this is 0 but a border might deem itself undisplayable with too small a size e.g. for the case of an image border the minimum height would be top + bottom and the minimum width would be left+right

Returns

0 if not applicable or a dimension if it is.

getMinimumWidth

public int getMinimumWidth()
Returns the minimum size required to properly display this border, normally this is 0 but a border might deem itself undisplayable with too small a size e.g. for the case of an image border the minimum height would be top + bottom and the minimum width would be left+right

Returns

0 if not applicable or a dimension if it is.

isBackgroundPainter

public boolean isBackgroundPainter()
Returns true if installing this border will override the painting of the component background

Returns

true if this border replaces the painter

getStrokeColor

public int getStrokeColor()
The color of the edge of the border if applicable

Returns

the strokeColor

getStrokeOpacity

public int getStrokeOpacity()
The opacity of the edge of the border if applicable

Returns

the strokeOpacity

getStrokeThickness

public float getStrokeThickness()
The thickness of the edge of the border if applicable, 0 if no stroke is needed

Returns

the strokeThickness

isStrokeMM

public boolean isStrokeMM()
True if the thickness of the stroke is in millimeters

Returns

the strokeMM

isBezierCorners

public boolean isBezierCorners()
True if the corners are bezier curves, otherwise the corners are drawn as a regular arc

Returns

true if the corners are a curve

getShadowSpread

public float getShadowSpread()
The spread of the shadow in pixels of millimeters

Returns

the shadowSpread

getShadowOpacity

public int getShadowOpacity()
The opacity of the shadow between 0 and 255

Returns

the shadowOpacity

getShadowColor

public int getShadowColor()
The color of the shadow as an RRGGBB color

Returns

the shadowColor

getShadowX

public float getShadowX()
X axis bias of the shadow between 0 and 1 where 0 is to the top and 1 is to the bottom, defaults to 0.5

Returns

the shadowX

getShadowY

public float getShadowY()
Y axis bias of the shadow between 0 and 1 where 0 is to the left and 1 is to the right, defaults to 0.5

Returns

the shadowY

getShadowBlur

public float getShadowBlur()
The Gaussian blur size

Returns

the shadowBlur

getCornerRadius

public float getCornerRadius()
The radius of the corners in millimeters

Returns

the radius

isTopOnlyMode

public boolean isTopOnlyMode()
Special mode where only the top of the round rectangle is rounded and the bottom is a regular rectangle

Returns

whether this is the top only mode

isBottomOnlyMode

public boolean isBottomOnlyMode()
Special mode where only the bottom of the round rectangle is rounded and the top is a regular rectangle

Returns

whether this is the bottom only mode

equals

public boolean equals(Object obj)
{Indicates whether some other object is “equal to” this one. The equals method implements an equivalence relation: It is reflexive: for any reference value x, x.equals(x) should return true. It is symmetric: for any reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. It is transitive: for any reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true. It is consistent: for any reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the object is modified. For any non-null reference value x, x.equals(null) should return false. The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).}

hashCode

public int hashCode()
Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable. The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables. As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)

isTopLeft

public boolean isTopLeft()
Returns true if this border corner is round and false if it’s square

Returns

the topLeft value

isTopRight

public boolean isTopRight()
Returns true if this border corner is round and false if it’s square

Returns

the topRight value

isBottomLeft

public boolean isBottomLeft()
Returns true if this border corner is round and false if it’s square

Returns

the bottomLeft value

isBottomRight

public boolean isBottomRight()
Returns true if this border corner is round and false if it’s square

Returns

the bottomRight value