Package jmri.util

Class ValidatingInputPane<T>

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible

    final class ValidatingInputPane<T>
    extends javax.swing.JPanel
    A helper Panel for input-validating input boxes. It converts and validates the text input, disabling confirmUI component (usually a button) when the input is not valid.
    • Nested Class Summary

      • Nested classes/interfaces inherited from class javax.swing.JPanel

        javax.swing.JPanel.AccessibleJPanel
      • Nested classes/interfaces inherited from class javax.swing.JComponent

        javax.swing.JComponent.AccessibleJComponent
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      • Fields inherited from class javax.swing.JComponent

        listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
      • Fields inherited from class java.awt.Component

        accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
      • Fields inherited from interface java.awt.image.ImageObserver

        ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
    • Constructor Summary

      Constructors 
      Constructor Description
      ValidatingInputPane​(java.util.function.Function<java.lang.String,​T> convertor)
      Creates new form ValidatingInputPane.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addNotify()  
      (package private) ValidatingInputPane<T> attachConfirmUI​(javax.swing.JComponent confirm)
      Attaches a component used to confirm/proceed.
      (package private) java.lang.String getErrorMessage()
      Gets the error message.
      (package private) java.lang.IllegalArgumentException getException()
      Returns the exception from the most recent validation.
      (package private) java.lang.String getText()
      Gets the input value, as text.
      (package private) javax.swing.JTextField getTextField()  
      (package private) T getValue()
      Gets the input value after conversion.
      (package private) boolean hasError()
      Determines if the input is erroneous.
      (package private) ValidatingInputPane<T> message​(java.lang.String msg)
      Configures a prompt message for the panel.
      (package private) void setText​(java.lang.String text)
      Sets the input value, as text.
      (package private) void validateText​(java.lang.String text)
      Should be called from tests only
      (package private) ValidatingInputPane<T> validator​(java.util.function.Predicate<T> val)
      Configures the validator.
      • Methods inherited from class javax.swing.JPanel

        getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
      • Methods inherited from class javax.swing.JComponent

        addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
      • Methods inherited from class java.awt.Container

        add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
      • Methods inherited from class java.awt.Component

        action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • ValidatingInputPane

        public ValidatingInputPane​(java.util.function.Function<java.lang.String,​T> convertor)
        Creates new form ValidatingInputPane.
        Parameters:
        convertor - converts String to the desired data type.
    • Method Detail

      • attachConfirmUI

        ValidatingInputPane<TattachConfirmUI​(javax.swing.JComponent confirm)
        Attaches a component used to confirm/proceed. The component will be disabled if the input is erroneous. The first validation will happen after this component appears on the screen. Typically, the OK button should be passed here.
        Parameters:
        confirm - the "confirm" control.
        Returns:
        this instance.
      • addNotify

        public void addNotify()
        Overrides:
        addNotify in class javax.swing.JComponent
      • message

        ValidatingInputPane<Tmessage​(java.lang.String msg)
        Configures a prompt message for the panel. The prompt message appears above the input line.
        Parameters:
        msg - message text
        Returns:
        this instance.
      • getException

        java.lang.IllegalArgumentException getException()
        Returns the exception from the most recent validation. Only exceptions from unsuccessful conversion or thrown by validator are returned. To check whether the input is valid, call hasError(). If the validator just rejects the input with no exception, this method returns null
        Returns:
        exception thrown by converter or validator.
      • validator

        ValidatingInputPane<Tvalidator​(java.util.function.Predicate<T> val)
        Configures the validator. Validator is called to check the value after the String input is converted to the target type. The validator can either just return false to reject the value with a generic message, or throw a IllegalArgumentException subclass with a custom message. The message will be then displayed below the input line.
        Parameters:
        val - validator instance, null to disable.
        Returns:
        this instance
      • hasError

        boolean hasError()
        Determines if the input is erroneous.
        Returns:
        error status
      • setText

        void setText​(java.lang.String text)
        Sets the input value, as text.
        Parameters:
        text - input text
      • getText

        java.lang.String getText()
        Gets the input value, as text.
        Returns:
        the input text
      • getValue

        T getValue()
        Gets the input value after conversion. May throw IllegalArgumentException if the conversion fails (text input cannot be converted to the target type). Returns null for empty (all whitespace) input.
        Returns:
        the entered value or null for empty input.
      • getErrorMessage

        java.lang.String getErrorMessage()
        Gets the error message. Either a custom message from an exception thrown by converter or validator, or the default message for failed validation. Returns null for valid input.
        Returns:
        if input is invalid, returns the error message. If the input is valid, returns null.
      • validateText

        void validateText​(java.lang.String text)
        Should be called from tests only
        Parameters:
        text - String to check for validation