Class Main.TextLineNumber

  • All Implemented Interfaces:
    java.awt.event.ComponentListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.beans.PropertyChangeListener, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible, javax.swing.event.CaretListener, javax.swing.event.DocumentListener
    Enclosing class:
    Main

    public class Main.TextLineNumber
    extends javax.swing.JPanel
    implements javax.swing.event.CaretListener, javax.swing.event.DocumentListener, java.awt.event.ComponentListener, java.beans.PropertyChangeListener
    This class will display line numbers for a related text component. The text component must use the same line height for each line. TextLineNumber supports wrapped lines and will highlight the line number of the current line in the text component. This class was designed to be used as a component added to the row header of a JScrollPane. Credits: The implementation of this class is based on "Text Component Line Number" Posted by Rob Camick on May 23, 2009 at https://tips4java.wordpress.com/2009/05/23/text-component-line-number/ Usage / License according to https://tips4java.wordpress.com/about/ : You are free to use and/or modify and/or distribute any or all code posted on the Java Tips Weblog without restriction. A credit in the code comments would be nice, but not in any way mandatory.
    See Also:
    Serialized Form
    • 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 
      Modifier and Type Field Description
      private int borderGap  
      static float CENTER  
      private javax.swing.text.JTextComponent component  
      private java.awt.Color currentLineForeground  
      private float digitAlignment  
      private int lastDigits  
      private int lastLine  
      static float LEFT  
      private int minimumDisplayDigits  
      private javax.swing.border.Border OUTER  
      static float RIGHT  
      private static long serialVersionUID  
      • 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
      TextLineNumber​(javax.swing.text.JTextComponent component, int minimumDisplayDigits)
      Create a line number component for a text component.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void caretUpdate​(javax.swing.event.CaretEvent e)  
      void changedUpdate​(javax.swing.event.DocumentEvent e)  
      void componentHidden​(java.awt.event.ComponentEvent e)  
      void componentMoved​(java.awt.event.ComponentEvent e)  
      void componentResized​(java.awt.event.ComponentEvent e)  
      void componentShown​(java.awt.event.ComponentEvent e)  
      private void documentChanged()  
      int getBorderGap()
      Gets the border gap
      java.awt.Color getCurrentLineForeground()
      Gets the current line rendering Color
      float getDigitAlignment()
      Gets the digit alignment
      int getMinimumDisplayDigits()
      Gets the minimum display digits
      private int getOffsetX​(int availableWidth, int stringWidth)  
      private int getOffsetY​(int rowStartOffset, java.awt.FontMetrics fontMetrics)  
      protected java.lang.String getTextLineNumber​(int rowStartOffset)  
      void insertUpdate​(javax.swing.event.DocumentEvent e)  
      private boolean isCurrentLine​(int rowStartOffset)  
      void paintComponent​(java.awt.Graphics g)
      Draw the line numbers
      void propertyChange​(java.beans.PropertyChangeEvent evt)  
      void removeUpdate​(javax.swing.event.DocumentEvent e)  
      void setBorderGap​(int borderGap)
      The border gap is used in calculating the left and right insets of the border.
      void setCurrentLineForeground​(java.awt.Color currentLineForeground)
      The Color used to render the current line digits.
      void setDigitAlignment​(float digitAlignment)
      Specify the horizontal alignment of the digits within the component.
      void setMinimumDisplayDigits​(int minimumDisplayDigits)
      Specify the minimum number of digits used to calculate the preferred width of the component.
      private void setPreferredWidth()
      Calculate the width needed to display the maximum line number
      • Methods inherited from class javax.swing.JPanel

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

        addAncestorListener, addNotify, 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, 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
    • Field Detail

      • OUTER

        private final javax.swing.border.Border OUTER
      • component

        private javax.swing.text.JTextComponent component
      • borderGap

        private int borderGap
      • currentLineForeground

        private java.awt.Color currentLineForeground
      • digitAlignment

        private float digitAlignment
      • minimumDisplayDigits

        private int minimumDisplayDigits
      • lastDigits

        private int lastDigits
      • lastLine

        private int lastLine
    • Constructor Detail

      • TextLineNumber

        public TextLineNumber​(javax.swing.text.JTextComponent component,
                              int minimumDisplayDigits)
        Create a line number component for a text component.
        Parameters:
        component - the related text component
        minimumDisplayDigits - the number of digits used to calculate the minimum width of the component
    • Method Detail

      • getBorderGap

        public int getBorderGap()
        Gets the border gap
        Returns:
        the border gap in pixels
      • setBorderGap

        public void setBorderGap​(int borderGap)
        The border gap is used in calculating the left and right insets of the border. Default value is 5.
        Parameters:
        borderGap - the gap in pixels
      • getCurrentLineForeground

        public java.awt.Color getCurrentLineForeground()
        Gets the current line rendering Color
        Returns:
        the Color used to render the current line number
      • setCurrentLineForeground

        public void setCurrentLineForeground​(java.awt.Color currentLineForeground)
        The Color used to render the current line digits. Default is Coolor.RED.
        Parameters:
        currentLineForeground - the Color used to render the current line
      • getDigitAlignment

        public float getDigitAlignment()
        Gets the digit alignment
        Returns:
        the alignment of the painted digits
      • setDigitAlignment

        public void setDigitAlignment​(float digitAlignment)
        Specify the horizontal alignment of the digits within the component. Common values would be:
        • TextLineNumber.LEFT
        • TextLineNumber.CENTER
        • TextLineNumber.RIGHT (default)
      • getMinimumDisplayDigits

        public int getMinimumDisplayDigits()
        Gets the minimum display digits
        Returns:
        the minimum display digits
      • setMinimumDisplayDigits

        public void setMinimumDisplayDigits​(int minimumDisplayDigits)
        Specify the minimum number of digits used to calculate the preferred width of the component.
        Parameters:
        minimumDisplayDigits - the number digits used in the preferred width calculation
      • setPreferredWidth

        private void setPreferredWidth()
        Calculate the width needed to display the maximum line number
      • paintComponent

        public void paintComponent​(java.awt.Graphics g)
        Draw the line numbers
        Overrides:
        paintComponent in class javax.swing.JComponent
      • isCurrentLine

        private boolean isCurrentLine​(int rowStartOffset)
      • getTextLineNumber

        protected java.lang.String getTextLineNumber​(int rowStartOffset)
      • getOffsetX

        private int getOffsetX​(int availableWidth,
                               int stringWidth)
      • getOffsetY

        private int getOffsetY​(int rowStartOffset,
                               java.awt.FontMetrics fontMetrics)
                        throws javax.swing.text.BadLocationException
        Throws:
        javax.swing.text.BadLocationException
      • caretUpdate

        public void caretUpdate​(javax.swing.event.CaretEvent e)
        Specified by:
        caretUpdate in interface javax.swing.event.CaretListener
      • changedUpdate

        public void changedUpdate​(javax.swing.event.DocumentEvent e)
        Specified by:
        changedUpdate in interface javax.swing.event.DocumentListener
      • insertUpdate

        public void insertUpdate​(javax.swing.event.DocumentEvent e)
        Specified by:
        insertUpdate in interface javax.swing.event.DocumentListener
      • removeUpdate

        public void removeUpdate​(javax.swing.event.DocumentEvent e)
        Specified by:
        removeUpdate in interface javax.swing.event.DocumentListener
      • documentChanged

        private void documentChanged()
      • propertyChange

        public void propertyChange​(java.beans.PropertyChangeEvent evt)
        Specified by:
        propertyChange in interface java.beans.PropertyChangeListener
      • componentResized

        public void componentResized​(java.awt.event.ComponentEvent e)
        Specified by:
        componentResized in interface java.awt.event.ComponentListener
      • componentMoved

        public void componentMoved​(java.awt.event.ComponentEvent e)
        Specified by:
        componentMoved in interface java.awt.event.ComponentListener
      • componentShown

        public void componentShown​(java.awt.event.ComponentEvent e)
        Specified by:
        componentShown in interface java.awt.event.ComponentListener
      • componentHidden

        public void componentHidden​(java.awt.event.ComponentEvent e)
        Specified by:
        componentHidden in interface java.awt.event.ComponentListener