Class Slider

All Implemented Interfaces:
Animation, Editable, ActionSource, StyleListener, IconHolder, TextHolder
Direct Known Subclasses:
SliderBridge

public class Slider extends Label implements ActionSource

The slider component serves both as a slider widget to allow users to select a value on a scale via touch/arrows and also to indicate progress. The slider defaults to percentage display but can represent any positive set of values.

Slider is very versatile and can be used to represent things as diverse as the 5 star ranking UI demonstrated below. Notice that for the UI to work correctly you need to enclose it in a layout that preserves its preferred size like flow layout.

public void showForm() {
  Form hi = new Form("Star Slider", new BoxLayout(BoxLayout.Y_AXIS));
  hi.add(FlowLayout.encloseCenter(createStarRankSlider()));
  hi.show();
}

private void initStarRankStyle(Style s, Image star) {
    s.setBackgroundType(Style.BACKGROUND_IMAGE_TILE_BOTH);
    s.setBorder(Border.createEmpty());
    s.setBgImage(star);
    s.setBgTransparency(0);
}

private Slider createStarRankSlider() {
    Slider starRank = new Slider();
    starRank.setEditable(true);
    starRank.setMinValue(0);
    starRank.setMaxValue(10);
    Font fnt = Font.createTrueTypeFont("native:mainLight", "native:mainLight").
            derive(Display.getInstance().convertToPixels(5, true), Font.STYLE_PLAIN);
    Style s = new Style(0xffff33, 0, fnt, (byte)0);
    Image fullStar = FontImage.createMaterial(FontImage.MATERIAL_STAR, s).toImage();
    s.setOpacity(100);
    s.setFgColor(0);
    Image emptyStar = FontImage.createMaterial(FontImage.MATERIAL_STAR, s).toImage();
    initStarRankStyle(starRank.getSliderEmptySelectedStyle(), emptyStar);
    initStarRankStyle(starRank.getSliderEmptyUnselectedStyle(), emptyStar);
    initStarRankStyle(starRank.getSliderFullSelectedStyle(), fullStar);
    initStarRankStyle(starRank.getSliderFullUnselectedStyle(), fullStar);
    starRank.setPreferredSize(new Dimension(fullStar.getWidth() * 5, fullStar.getHeight()));
    return starRank;
}

Slider can be used as a progress indicator for network operations when combined with the com.codename1.components.SliderBridge component:

Form hi = new Form("Download Progress", new BorderLayout());
Slider progress = new Slider();
Button download = new Button("Download");
download.addActionListener((e) -> {
    ConnectionRequest cr = new ConnectionRequest("https://www.codenameone.com/img/blog/new_icon.png", false);
    SliderBridge.bindProgress(cr, progress);
    NetworkManager.getInstance().addToQueueAndWait(cr);
    if(cr.getResponseCode() == 200) {
        hi.add(BorderLayout.CENTER, new ScaleImageLabel(EncodedImage.create(cr.getResponseData())));
        hi.revalidate();
    }
});
hi.add(BorderLayout.SOUTH, progress).add(BorderLayout.NORTH, download);
hi.show();
  • Constructor Details

    • Slider

      public Slider()
      The default constructor uses internal rendering to draw its state
  • Method Details

    • createInfinite

      public static Slider createInfinite()

      Creates an infinite progress slider

      Returns

      a slider instance that has no end value

    • setUIID

      public final void setUIID(String id)

      This method sets the Component the Unique identifier. This method should be used before a component has been initialized

      Parameters
      • id: UIID unique identifier for component type
      Overrides:
      setUIID in class Label
    • isStickyDrag

      protected boolean isStickyDrag()

      Returns true if the component is interested in receiving drag/pointer release events even after the gesture exceeded its boundaries. This is useful for spinners etc. where the motion might continue beyond the size of the component

      Returns

      false by default

      Overrides:
      isStickyDrag in class Component
    • initComponent

      public void initComponent()
      Allows subclasses to bind functionality that relies on fully initialized and "ready for action" component state
      Overrides:
      initComponent in class Component
    • deinitialize

      public void deinitialize()
      Invoked to indicate that the component initialization is being reversed since the component was detached from the container hierarchy. This allows the component to deregister animators and cleanup after itself. This method is the opposite of the initComponent() method.
      Overrides:
      deinitialize in class Component
    • animate

      public boolean animate()

      Allows the animation to reduce "repaint" calls when it returns false. It is called once for every frame. Frames are defined by the com.codename1.ui.Display class.

      Returns

      true if a repaint is desired or false if no repaint is necessary

      Specified by:
      animate in interface Animation
      Overrides:
      animate in class Label
    • isInfinite

      public boolean isInfinite()

      The infinite slider functionality is used to animate progress for which there is no defined value.

      Returns

      true for infinite progress

    • setInfinite

      public void setInfinite(boolean i)

      Activates/disables the infinite slider functionality used to animate progress for which there is no defined value.

      Parameters
      • i: true for infinite progress
    • refreshTheme

      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!

      Parameters
      • merge: indicates if the current styles should be merged with the new styles
      Overrides:
      refreshTheme in class Label
    • getProgress

      public int getProgress()

      Indicates the value of progress made

      Returns

      the progress on the slider

    • setProgress

      public void setProgress(int value)

      Indicates the value of progress made, this method is thread safe and can be invoked from any thread although discretion should still be kept so one thread doesn't regress progress made by another thread...

      Parameters
      • value: new value for progress
    • getProgress

      public int getProgress(ActionEvent evt)

      Gets the progress of the slider at the point where the provided ActionEvent was triggered.

      Parameters
      • evt: An ActionEvent that originated from this slider.
      Returns

      The progress of the slider.

      Since

      7.0

    • formattedValue

      protected String formattedValue(int value)

      Allows formatting the appearance of the progress when text is drawn on top

      Parameters
      • value: the value of the slider
      Returns

      a string formatted version

    • getSliderFullUnselectedStyle

      public Style getSliderFullUnselectedStyle()

      Returns the com.codename1.ui.plaf.Style used to paint the slider when its full

      Returns

      the Style object that shows a completely full style.

    • getSliderFullSelectedStyle

      public Style getSliderFullSelectedStyle()

      Returns the com.codename1.ui.plaf.Style used to paint the slider when its full and selected

      Returns

      the Style object that shows a completely full style.

    • getSliderEmptyUnselectedStyle

      public Style getSliderEmptyUnselectedStyle()

      Returns the com.codename1.ui.plaf.Style used to paint the slider when its full

      Returns

      the Style object that shows a completely full style.

    • getSliderEmptySelectedStyle

      public Style getSliderEmptySelectedStyle()

      Returns the com.codename1.ui.plaf.Style used to paint the slider when its full and selected

      Returns

      the Style object that shows a completely full style.

    • getStyle

      public Style getStyle()

      Returns the current Component Style allowing code to draw the current component, you should normally use getUnselected/Pressed/DisabledStyle() and not this method since it will return different values based on component state.

      Returns

      the component Style object

      Overrides:
      getStyle in class Component
    • calcPreferredSize

      protected Dimension calcPreferredSize()
      Return the size we would generally like for the component
      Overrides:
      calcPreferredSize in class Label
    • paintComponentBackground

      public void paintComponentBackground(Graphics g)
      Paint the progress indicator
    • isVertical

      public boolean isVertical()

      Indicates the slider is vertical

      Returns

      true if the slider is vertical

    • setVertical

      public void setVertical(boolean vertical)

      Indicates the slider is vertical

      Parameters
      • vertical: true if the slider is vertical
    • isEditable

      public boolean isEditable()

      Indicates the slider is modifyable

      Returns

      true if the slider is editable

      Specified by:
      isEditable in interface Editable
      Overrides:
      isEditable in class Component
    • setEditable

      public void setEditable(boolean editable)

      Indicates the slider is modifyable

      Parameters
      • editable: true if the slider is editable
    • pointerPressed

      public void pointerPressed(int x, int y)
      Description copied from class: Component

      If this Component is focused, the pointer pressed event will call this method

      Parameters
      • x: the pointer x coordinate

      • y: the pointer y coordinate

      Overrides:
      pointerPressed in class Component
    • pointerDragged

      public void pointerDragged(int x, int y)

      If this Component is focused, the pointer dragged event will call this method

      Parameters
      • x: the pointer x coordinate

      • y: the pointer y coordinate

      Overrides:
      pointerDragged in class Component
    • fireClicked

      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. When overriding this method you should also override isSelectableInteraction to indicate that a command is placed appropriately on top of the fire key for 3 soft button phones.
      Overrides:
      fireClicked in class Component
    • isSelectableInteraction

      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.

      Returns

      true if this is a selectable interaction

      Overrides:
      isSelectableInteraction in class Component
    • pointerReleased

      public void pointerReleased(int x, int y)

      If this Component is focused, the pointer released event will call this method

      Parameters
      • x: the pointer x coordinate

      • y: the pointer y coordinate

      Overrides:
      pointerReleased in class Component
    • keyReleased

      public void keyReleased(int code)

      If this Component is focused, the key released event will call this method

      Parameters
      • keyCode: the key code value to indicate a physical key.
      Overrides:
      keyReleased in class Component
    • keyPressed

      public void keyPressed(int code)

      If this Component is focused, the key pressed event will call this method

      Parameters
      • keyCode: the key code value to indicate a physical key.
      Overrides:
      keyPressed in class Component
    • getIncrements

      public int getIncrements()

      The increments when the user presses a key to the left/right/up/down etc.

      Returns

      increment value

    • setIncrements

      public void setIncrements(int increments)

      The increments when the user presses a key to the left/right/up/down etc.

      Parameters
      • increments: increment value
    • addDataChangedListener

      public void addDataChangedListener(DataChangedListener l)

      Adds a listener to data changed events, notice that the status argument to the data change listener shouldn't be relied upon.

      Parameters
      • l: new listener
    • removeDataChangedListener

      public void removeDataChangedListener(DataChangedListener l)

      Removes a listener from data changed events, notice that the status argument to the data change listener shouldn't be relied upon.

      Parameters
      • l: listener to remove
    • addActionListener

      public void addActionListener(ActionListener l)

      Action listeners give a more coarse event only when the user lifts the finger from the slider

      Parameters
      • l: the listener
      Specified by:
      addActionListener in interface ActionSource
    • removeActionListener

      public void removeActionListener(ActionListener l)

      Action listeners give a more coarse event only when the user lifts the finger from the slider

      Parameters
      • l: the listener
      Specified by:
      removeActionListener in interface ActionSource
    • isRenderPercentageOnTop

      public boolean isRenderPercentageOnTop()

      Indicates that the value of the slider should be rendered with a percentage sign on top of the slider.

      Returns

      true if so

    • setRenderPercentageOnTop

      public void setRenderPercentageOnTop(boolean renderPercentageOnTop)

      Indicates that the value of the slider should be rendered with a percentage sign on top of the slider.

      Parameters
      • renderPercentageOnTop: true to render percentages
    • isRenderValueOnTop

      public boolean isRenderValueOnTop()
      Returns

      the renderValueOnTop

    • setRenderValueOnTop

      public void setRenderValueOnTop(boolean renderValueOnTop)
      Parameters
      • renderValueOnTop: the renderValueOnTop to set
    • getMaxValue

      public int getMaxValue()
      Returns

      the maxValue

    • setMaxValue

      public void setMaxValue(int maxValue)
      Parameters
      • maxValue: the maxValue to set
    • getMinValue

      public int getMinValue()
      Returns

      the minValue

    • setMinValue

      public void setMinValue(int minValue)
      Parameters
      • minValue: the minValue to set
    • getThumbImage

      public Image getThumbImage()

      The thumb image is drawn on top of the current progress

      Returns

      the thumbImage

    • setThumbImage

      public void setThumbImage(Image thumbImage)

      The thumb image is drawn on top of the current progress

      Parameters
      • thumbImage: the thumbImage to set
    • shouldBlockSideSwipe

      protected boolean shouldBlockSideSwipe()
      A component that might need side swipe such as the slider could block it from being used for some other purpose when on top of said component.
      Overrides:
      shouldBlockSideSwipe in class Component