Class TextLineNumber

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
de.stefanreiser.swing.text.TextLineNumber
All Implemented Interfaces:
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

public class TextLineNumber
extends javax.swing.JPanel
implements javax.swing.event.CaretListener, javax.swing.event.DocumentListener, 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.


Quelle:
Rob Camick. "Text Component Line Number". (May 23, 2009).
http://tips4java.wordpress.com/2009/05/23/text-component-line-number/

Der Autor sagt in einem Kommentar seines Blogs:
"Rob Camick said, April 11, 2011 at 10:01 am: You are free to use the code however you wish."

Diverse Überarbeitungen meinerseits: u.a. wird die Registrierung an der Textkomponente nun mittels Methode attachToComponent() vorgenommen, nicht mehr durch Übergabe der Textkomponente an den Konstruktor - das macht u.U. Probleme, weil "this" dadurch bereits im Konstruktor in Aufrufen von Methoden anderer Objekte benutzt wurde, d.h., zu einem Zeitpunkt, zu dem die Initialisierung noch nicht abgeschlossen ist.

Author:
Rob Camick, Stefan Reiser
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 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()
    Create a line number component.
    TextLineNumber​(int minimumDisplayDigits)
    Create a line number component.
  • Method Summary

    Modifier and Type Method Description
    void attachToComponent​(javax.swing.text.JTextComponent textComponent)  
    void caretUpdate​(javax.swing.event.CaretEvent e)  
    void changedUpdate​(javax.swing.event.DocumentEvent e)  
    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
    protected java.lang.String getTextLineNumber​(int rowStartOffset)  
    boolean getUpdateFont()
    Gets the update font property
    void insertUpdate​(javax.swing.event.DocumentEvent e)  
    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 mimimum number of digits used to calculate the preferred width of the component.
    void setUpdateFont​(boolean updateFont)
    Set the update font property.

    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
  • Constructor Details

    • TextLineNumber

      public TextLineNumber()
      Create a line number component. Minimum display width will be based on 3 digits.
    • TextLineNumber

      public TextLineNumber​(int minimumDisplayDigits)
      Create a line number component.
      Parameters:
      minimumDisplayDigits - the number of digits used to calculate the minimum width of the component
  • Method Details

    • attachToComponent

      public void attachToComponent​(javax.swing.text.JTextComponent textComponent)
    • getUpdateFont

      public boolean getUpdateFont()
      Gets the update font property
      Returns:
      the update font property
    • setUpdateFont

      public void setUpdateFont​(boolean updateFont)
      Set the update font property. Indicates whether this Font should be updated automatically when the Font of the related text component is changed.
      Parameters:
      updateFont - when true update the Font and repaint the line numbers, otherwise just repaint the line numbers.
    • getBorderGap

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

      public final 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 final 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 final 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 final void setMinimumDisplayDigits​(int minimumDisplayDigits)
      Specify the mimimum number of digits used to calculate the preferred width of the component. Default is 3.
      Parameters:
      minimumDisplayDigits - the number digits used in the preferred width calculation
    • paintComponent

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

      protected java.lang.String getTextLineNumber​(int rowStartOffset)
    • 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
    • propertyChange

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