Class Main.TextLineNumber
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
org.languagetool.gui.Main.TextLineNumber
- All Implemented Interfaces:
ComponentListener, ImageObserver, MenuContainer, PropertyChangeListener, Serializable, EventListener, Accessible, CaretListener, DocumentListener
- Enclosing class:
Main
public class Main.TextLineNumber
extends JPanel
implements CaretListener, DocumentListener, ComponentListener, 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:
-
Nested Class Summary
Nested classes/interfaces inherited from class JPanel
JPanel.AccessibleJPanelNested classes/interfaces inherited from class JComponent
JComponent.AccessibleJComponentNested classes/interfaces inherited from class Container
Container.AccessibleAWTContainerNested classes/interfaces inherited from class Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate intstatic final floatprivate JTextComponentprivate Colorprivate floatprivate intprivate intstatic final floatprivate intprivate final Borderstatic final floatprivate static final longFields inherited from class JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOWFields inherited from class Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTFields inherited from interface ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH -
Constructor Summary
ConstructorsConstructorDescriptionTextLineNumber(JTextComponent component, int minimumDisplayDigits) Create a line number component for a text component. -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidvoidvoidvoidvoidprivate voidintGets the border gapGets the current line rendering ColorfloatGets the digit alignmentintGets the minimum display digitsprivate intgetOffsetX(int availableWidth, int stringWidth) private intgetOffsetY(int rowStartOffset, FontMetrics fontMetrics) protected StringgetTextLineNumber(int rowStartOffset) voidprivate booleanisCurrentLine(int rowStartOffset) voidDraw the line numbersvoidvoidvoidsetBorderGap(int borderGap) The border gap is used in calculating the left and right insets of the border.voidsetCurrentLineForeground(Color currentLineForeground) The Color used to render the current line digits.voidsetDigitAlignment(float digitAlignment) Specify the horizontal alignment of the digits within the component.voidsetMinimumDisplayDigits(int minimumDisplayDigits) Specify the minimum number of digits used to calculate the preferred width of the component.private voidCalculate the width needed to display the maximum line numberMethods inherited from class JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUIMethods inherited from class 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, updateMethods inherited from class 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, validateTreeMethods inherited from class 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
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
LEFT
public static final float LEFT- See Also:
-
CENTER
public static final float CENTER- See Also:
-
RIGHT
public static final float RIGHT- See Also:
-
OUTER
-
component
-
borderGap
private int borderGap -
currentLineForeground
-
digitAlignment
private float digitAlignment -
minimumDisplayDigits
private int minimumDisplayDigits -
lastDigits
private int lastDigits -
lastLine
private int lastLine
-
-
Constructor Details
-
TextLineNumber
Create a line number component for a text component.- Parameters:
component- the related text componentminimumDisplayDigits- the number of digits used to calculate the minimum width of the component
-
-
Method Details
-
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
Gets the current line rendering Color- Returns:
- the Color used to render the current line number
-
setCurrentLineForeground
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
Draw the line numbers- Overrides:
paintComponentin classJComponent
-
isCurrentLine
private boolean isCurrentLine(int rowStartOffset) -
getTextLineNumber
-
getOffsetX
private int getOffsetX(int availableWidth, int stringWidth) -
getOffsetY
- Throws:
BadLocationException
-
caretUpdate
- Specified by:
caretUpdatein interfaceCaretListener
-
changedUpdate
- Specified by:
changedUpdatein interfaceDocumentListener
-
insertUpdate
- Specified by:
insertUpdatein interfaceDocumentListener
-
removeUpdate
- Specified by:
removeUpdatein interfaceDocumentListener
-
documentChanged
private void documentChanged() -
propertyChange
- Specified by:
propertyChangein interfacePropertyChangeListener
-
componentResized
- Specified by:
componentResizedin interfaceComponentListener
-
componentMoved
- Specified by:
componentMovedin interfaceComponentListener
-
componentShown
- Specified by:
componentShownin interfaceComponentListener
-
componentHidden
- Specified by:
componentHiddenin interfaceComponentListener
-