public abstract class InputComponent extends Container
A base class for TextComponent
, PickerComponent
and potentially other components that wish to accept input in a dynamic way that matches iOS and
Android native input guidelines.
It is highly recommended to use input components in the context of a
TextModeLayout
. This allows the layout to implicitly adapt to the on-top
mode and use a box layout Y mode for iOS and other platforms.
This class supports several theme constants:
textComponentErrorColor
a hex RGB color which defaults to null in which case this has no effect.
When defined this will change the color of the border and label to the given color to match the material design
styling.
textComponentErrorLineBorderBool
when set to false
, this will prevent the text component from
applying an underline border when there is a validation error. Defaults to true
.
textComponentOnTopBool
toggles the on top mode see onTopMode(boolean)
textComponentFieldUIID
sets the UIID of the text field to something other than TextField
which is useful for platforms such as iOS where the look of the text field is different within the text component
inputComponentErrorMultilineBool
sets the error label to multiline when activated
The following code demonstrates a simple set of inputs and validation as it appears in iOS, Android and with validation errors
BASELINE, BOTTOM, BRB_CENTER_OFFSET, BRB_CONSTANT_ASCENT, BRB_CONSTANT_DESCENT, BRB_OTHER, CENTER, CROSSHAIR_CURSOR, DEFAULT_CURSOR, DRAG_REGION_IMMEDIATELY_DRAG_X, DRAG_REGION_IMMEDIATELY_DRAG_XY, DRAG_REGION_IMMEDIATELY_DRAG_Y, DRAG_REGION_LIKELY_DRAG_X, DRAG_REGION_LIKELY_DRAG_XY, DRAG_REGION_LIKELY_DRAG_Y, DRAG_REGION_NOT_DRAGGABLE, DRAG_REGION_POSSIBLE_DRAG_X, DRAG_REGION_POSSIBLE_DRAG_XY, DRAG_REGION_POSSIBLE_DRAG_Y, E_RESIZE_CURSOR, HAND_CURSOR, LEFT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NW_RESIZE_CURSOR, RIGHT, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, TOP, W_RESIZE_CURSOR, WAIT_CURSOR
Modifier | Constructor and Description |
---|---|
protected |
InputComponent()
Protected constructor for subclasses to override
|
Modifier and Type | Method and Description |
---|---|
InputComponent |
action(char icon)
Sets the icon for the action button
|
InputComponent |
actionAsButton(boolean asButton)
Indicates the action should behave as a button next to the component
and not layered on top of the text component.
|
InputComponent |
actionClick(ActionListener c)
Binds an event for the action button
|
InputComponent |
actionText(String text)
Provides the text of the action button
|
InputComponent |
actionUIID(String uiid)
Sets the UIID for the action button
|
protected Dimension |
calcPreferredSize()
Calculates the preferred size based on component content.
|
protected TextHolder |
createErrorLabel()
Can be overriden by subclasses to support custom error label components
|
InputComponent |
descriptionMessage(String descriptionMessage)
Sets the text of the description label which currently only applies in the onTop mode.
|
InputComponent |
errorMessage(String errorMessage)
Sets the text of the error label
|
Button |
getAction()
Returns the button underlying the action button that is placed on
the right of the field on top of it
|
String |
getActionText()
Provides the text of the action button
|
String |
getActionUIID()
UIID for the action button
|
abstract Component |
getEditor()
Returns the editor component e.g.
|
Object |
getPropertyValue(String name)
Returns the current value of the property name, this method is used by the GUI builder
|
static void |
group(Component... cmps)
Groups together multiple text components and labels so they align properly, this is implicitly invoked
by
TextModeLayout so this method is unnecessary when using that
layout |
protected void |
initInput()
This method must be invoked by the constructor of the subclasses to initialize the UI
|
boolean |
isActionAsButton()
Indicates the action should behave as a button next to the component
and not layered on top of the text component.
|
static boolean |
isMultiLineErrorMessage()
True if error messages should be multiline by default.
|
boolean |
isOnTopMode()
Indicates the on top mode which places the label above the text when true.
|
InputComponent |
label(String text)
Sets the text of the label
|
InputComponent |
onTopMode(boolean onTopMode)
Sets the on top mode which places the label above the text when true.
|
static void |
setMultiLineErrorMessage(boolean aMultiLineErrorMessage)
True if error messages should be multiline by default.
|
String |
setPropertyValue(String name,
Object value)
Sets a new value to the given property, returns an error message if failed
and null if successful.
|
add, add, add, add, add, add, addAll, addComponent, addComponent, addComponent, addComponent, animateHierarchy, animateHierarchyAndWait, animateHierarchyFade, animateHierarchyFadeAndWait, animateLayout, animateLayoutAndWait, animateLayoutFade, animateLayoutFadeAndWait, animateUnlayout, animateUnlayoutAndWait, applyRTL, cancelRepaints, clearClientProperties, constrainHeightWhenScrollable, constrainWidthWhenScrollable, contains, createAnimateHierarchy, createAnimateHierarchyFade, createAnimateLayout, createAnimateLayoutFade, createAnimateLayoutFadeAndWait, createAnimateMotion, createAnimateUnlayout, createReplaceTransition, dragInitiated, drop, encloseIn, encloseIn, findDropTargetAt, findFirstFocusable, fireClicked, flushReplace, forceRevalidate, getBottomGap, getChildrenAsList, getClosestComponentTo, getComponentAt, getComponentAt, getComponentCount, getComponentIndex, getGridPosX, getGridPosY, getLayout, getLayoutHeight, getLayoutWidth, getLeadComponent, getLeadParent, getResponderAt, getSafeAreaRoot, getScrollIncrement, getSideGap, getUIManager, initLaf, invalidate, isEnabled, isSafeArea, isSafeAreaRoot, isScrollableX, isScrollableY, isSelectableInteraction, isSurface, iterator, iterator, keyPressed, keyReleased, layoutContainer, morph, morphAndWait, paint, paintBackground, paintBorderBackground, paintComponentBackground, paintGlass, paramString, pointerPressed, refreshTheme, removeAll, removeComponent, replace, replace, replaceAndWait, replaceAndWait, replaceAndWait, revalidate, revalidateLater, revalidateWithAnimationSafety, scrollComponentToVisible, setCellRenderer, setEnabled, setLayout, setLeadComponent, setSafeArea, setSafeAreaRoot, setScrollable, setScrollableX, setScrollableY, setScrollIncrement, setShouldCalcPreferredSize, setShouldLayout, setUIManager, updateTabIndices
addDragFinishedListener, addDragOverListener, addDropListener, addFocusListener, addLongPressListener, addPointerDraggedListener, addPointerPressedListener, addPointerReleasedListener, addPullToRefresh, addScrollListener, addStateChangeListener, animate, bindProperty, blocksSideSwipe, calcScrollSize, contains, containsOrOwns, createStyleAnimation, deinitialize, deinitializeCustomStyle, dragEnter, dragExit, dragFinished, draggingOver, drawDraggedImage, focusGained, focusLost, getAbsoluteX, getAbsoluteY, getAllStyles, getAnimationManager, getBaseline, getBaselineResizeBehavior, getBindablePropertyNames, getBindablePropertyTypes, getBorder, getBoundPropertyValue, getBounds, getBounds, getClientProperty, getCloudBoundProperty, getCloudDestinationProperty, getComponentForm, getComponentState, getCursor, getDefaultDragTransparency, getDirtyRegion, getDisabledStyle, getDraggedx, getDraggedy, getDragImage, getDragRegionStatus, getDragSpeed, getDragTransparency, getEditingDelegate, getHeight, getInlineAllStyles, getInlineDisabledStyles, getInlinePressedStyles, getInlineSelectedStyles, getInlineStylesTheme, getInlineUnselectedStyles, getInnerHeight, getInnerPreferredH, getInnerPreferredW, getInnerWidth, getInnerX, getInnerY, getLabelForComponent, getName, getNativeOverlay, getNextFocusDown, getNextFocusLeft, getNextFocusRight, getNextFocusUp, getOuterHeight, getOuterPreferredH, getOuterPreferredW, getOuterWidth, getOuterX, getOuterY, getOwner, getParent, getPreferredH, getPreferredSize, getPreferredSizeStr, getPreferredTabIndex, getPreferredW, getPressedStyle, getPropertyNames, getPropertyTypeNames, getPropertyTypes, getSameHeight, getSameWidth, getScrollable, getScrollAnimationSpeed, getScrollDimension, getScrollOpacity, getScrollOpacityChangeSpeed, getScrollX, getScrollY, getSelectCommandText, getSelectedRect, getSelectedStyle, getStyle, getTabIndex, getTensileLength, getTextSelectionSupport, getTooltip, getUIID, getUnselectedStyle, getVisibleBounds, getVisibleBounds, getWidth, getX, getY, growShrink, handlesInput, hasFixedPreferredSize, hasFocus, hideNativeOverlay, initComponent, initCustomStyle, initDisabledStyle, initPressedStyle, initSelectedStyle, initUnselectedStyle, installDefaultPainter, isAlwaysTensile, isBlockLead, isCellRenderer, isChildOf, isDragActivated, isDragAndDropOperation, isDraggable, isDragRegion, isDropTarget, isEditable, isEditing, isFlatten, isFocusable, isGrabsPointerEvents, isHidden, isHidden, isHideInLandscape, isHideInPortrait, isIgnorePointerEvents, isInClippingRegion, isInitialized, isOpaque, isOwnedBy, isPinchBlocksDragAndDrop, isRippleEffect, isRTL, isScrollable, isScrollVisible, isSetCursorSupported, isSmoothScrolling, isSnapToGrid, isStickyDrag, isTactileTouch, isTactileTouch, isTensileDragEnabled, isTraversable, isVisible, keyRepeated, laidOut, longKeyPress, longPointerPress, onScrollX, onScrollY, paintBackgrounds, paintBorder, paintComponent, paintComponent, paintIntersectingComponentsAbove, paintLock, paintLockRelease, paintRippleOverlay, paintScrollbars, paintScrollbarX, paintScrollbarY, paintShadows, parsePreferredSize, pinch, pinch, pinchReleased, pointerDragged, pointerDragged, pointerHover, pointerHoverPressed, pointerHoverReleased, pointerPressed, pointerReleased, pointerReleased, putClientProperty, refreshTheme, refreshTheme, remove, removeDragFinishedListener, removeDragOverListener, removeDropListener, removeFocusListener, removeLongPressListener, removePointerDraggedListener, removePointerPressedListener, removePointerReleasedListener, removeScrollListener, removeStateChangeListener, repaint, repaint, requestFocus, resetFocusable, respondsToPointerEvents, scrollRectToVisible, scrollRectToVisible, setAlwaysTensile, setBlockLead, setBoundPropertyValue, setCloudBoundProperty, setCloudDestinationProperty, setComponentState, setCursor, setDefaultDragTransparency, setDirtyRegion, setDisabledStyle, setDraggable, setDragTransparency, setDropTarget, setEditingDelegate, setFlatten, setFocus, setFocusable, setGrabsPointerEvents, setHandlesInput, setHeight, setHidden, setHidden, setHideInLandscape, setHideInPortrait, setIgnorePointerEvents, setInitialized, setInlineAllStyles, setInlineDisabledStyles, setInlinePressedStyles, setInlineSelectedStyles, setInlineStylesTheme, setInlineUnselectedStyles, setIsScrollVisible, setLabelForComponent, setName, setNextFocusDown, setNextFocusLeft, setNextFocusRight, setNextFocusUp, setOpaque, setOwner, setPinchBlocksDragAndDrop, setPreferredH, setPreferredSize, setPreferredSizeStr, setPreferredTabIndex, setPreferredW, setPressedStyle, setRippleEffect, setRTL, setSameHeight, setSameSize, setSameWidth, setScrollAnimationSpeed, setScrollOpacityChangeSpeed, setScrollSize, setScrollVisible, setScrollX, setScrollY, setSelectCommandText, setSelectedStyle, setSize, setSmoothScrolling, setSnapToGrid, setTabIndex, setTactileTouch, setTensileDragEnabled, setTensileLength, setTooltip, setTraversable, setUIID, setUIID, setUnselectedStyle, setVisible, setWidth, setX, setY, shouldBlockSideSwipe, shouldBlockSideSwipeLeft, shouldBlockSideSwipeRight, shouldRenderComponentSelection, showNativeOverlay, startEditingAsync, stopEditing, stripMarginAndPadding, styleChanged, toImage, toString, unbindProperty, updateNativeOverlay, visibleBoundsContains
protected InputComponent()
protected void initInput()
protected TextHolder createErrorLabel()
ErrorLabel
UIIDprotected Dimension calcPreferredSize()
Container
calcPreferredSize
in class Container
public abstract Component getEditor()
public InputComponent onTopMode(boolean onTopMode)
textComponentOnTopBool
theme constant which defaults to falseonTopMode
- true for the label to be above the textTextComponent tc = new TextComponent().text("Text").label("Label");
public boolean isOnTopMode()
textComponentOnTopBool
theme constant which defaults to falsepublic static void group(Component... cmps)
TextModeLayout
so this method is unnecessary when using that
layoutcmps
- a list of components if it's a text component that is not in the on top mode the width of the labels
will be alignedpublic InputComponent errorMessage(String errorMessage)
errorMessage
- the textTextComponent tc = new TextComponent().text("Text").label("Label");
public InputComponent descriptionMessage(String descriptionMessage)
descriptionMessage
- the textTextComponent tc = new TextComponent().text("Text").label("Label");
public InputComponent label(String text)
text
- the textTextComponent tc = new TextComponent().text("Text").label("Label");
public InputComponent actionUIID(String uiid)
uiid
- a custom UIID for the actionTextComponent tc = new TextComponent().text("Text").label("Label");
public String getActionUIID()
public InputComponent actionAsButton(boolean asButton)
asButton
- true so the action will act like a buttonTextComponent tc = new TextComponent().text("Text").label("Label");
public boolean isActionAsButton()
public InputComponent actionText(String text)
text
- the text that should appear on the action buttonTextComponent tc = new TextComponent().text("Text").label("Label");
public String getActionText()
public InputComponent action(char icon)
icon
- the icon constant from FontImage
TextComponent tc = new TextComponent().text("Text").label("Label");
public InputComponent actionClick(ActionListener c)
c
- action listener callbackTextComponent tc = new TextComponent().text("Text").label("Label");
public Button getAction()
public Object getPropertyValue(String name)
getPropertyValue
in class Component
name
- the name of the propertypublic String setPropertyValue(String name, Object value)
setPropertyValue
in class Component
name
- the name of the propertyvalue
- new value for the propertypublic static boolean isMultiLineErrorMessage()
inputComponentErrorMultilineBool
public static void setMultiLineErrorMessage(boolean aMultiLineErrorMessage)
inputComponentErrorMultilineBool
aMultiLineErrorMessage
- the multiLineErrorMessage to set