Package org.languagetool.gui
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:
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
-
-
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
-
-
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 gapjava.awt.Color
getCurrentLineForeground()
Gets the current line rendering Colorfloat
getDigitAlignment()
Gets the digit alignmentint
getMinimumDisplayDigits()
Gets the minimum display digitsprivate 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 numbersvoid
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
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
LEFT
public static final float LEFT
- See Also:
- Constant Field Values
-
CENTER
public static final float CENTER
- See Also:
- Constant Field Values
-
RIGHT
public static final float RIGHT
- See Also:
- Constant Field Values
-
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 componentminimumDisplayDigits
- 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 classjavax.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 interfacejavax.swing.event.CaretListener
-
changedUpdate
public void changedUpdate(javax.swing.event.DocumentEvent e)
- Specified by:
changedUpdate
in interfacejavax.swing.event.DocumentListener
-
insertUpdate
public void insertUpdate(javax.swing.event.DocumentEvent e)
- Specified by:
insertUpdate
in interfacejavax.swing.event.DocumentListener
-
removeUpdate
public void removeUpdate(javax.swing.event.DocumentEvent e)
- Specified by:
removeUpdate
in interfacejavax.swing.event.DocumentListener
-
documentChanged
private void documentChanged()
-
propertyChange
public void propertyChange(java.beans.PropertyChangeEvent evt)
- Specified by:
propertyChange
in interfacejava.beans.PropertyChangeListener
-
componentResized
public void componentResized(java.awt.event.ComponentEvent e)
- Specified by:
componentResized
in interfacejava.awt.event.ComponentListener
-
componentMoved
public void componentMoved(java.awt.event.ComponentEvent e)
- Specified by:
componentMoved
in interfacejava.awt.event.ComponentListener
-
componentShown
public void componentShown(java.awt.event.ComponentEvent e)
- Specified by:
componentShown
in interfacejava.awt.event.ComponentListener
-
componentHidden
public void componentHidden(java.awt.event.ComponentEvent e)
- Specified by:
componentHidden
in interfacejava.awt.event.ComponentListener
-
-