Class JEditTextArea

All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable
Direct Known Subclasses:
JEditBasedTextArea

public class JEditTextArea extends JComponent
jEdit's text area component. It is more suited for editing program source code than JEditorPane, because it drops the unnecessary features (images, variable-width lines, and so on) and adds a whole bunch of useful goodies such as:
  • More flexible key binding scheme
  • Supports macro recorders
  • Rectangular selection
  • Bracket highlighting
  • Syntax highlighting
  • Command repetition
  • Block caret can be enabled
It is also faster and doesn't have as many problems. It can be used in other applications; the only other part of jEdit it depends on is the syntax package.

To use it in your app, treat it like any other component, for example:

JEditTextArea ta = new JEditTextArea();
 ta.setTokenMarker(new JavaTokenMarker());
 ta.setText("public class Test {\n"
     + "    public static void main(String[] args) {\n"
     + "        System.out.println(\"Hello World\");\n"
     + "    }\n"
     + "}");
Version:
$Id: JEditTextArea.java,v 1.36 1999/12/13 03:40:30 sp Exp $
Author:
Slava Pestov
See Also:
  • Field Details

    • LEFT_OF_SCROLLBAR

      public static String LEFT_OF_SCROLLBAR
      Adding components with this name to the text area will place them left of the horizontal scroll bar. In jEdit, the status bar is added this way.
    • CENTER

      protected static String CENTER
    • BOTTOM

      protected static String BOTTOM
    • focusedComponent

      protected static JEditTextArea focusedComponent
    • caretTimer

      protected static Timer caretTimer
    • painter

      protected TextAreaPainter painter
    • listenerList

      protected EventListenerList listenerList
    • caretEvent

      protected JEditTextArea.MutableCaretEvent caretEvent
    • caretVisible

      protected boolean caretVisible
    • editable

      protected boolean editable
    • caretBlinkRate

      protected int caretBlinkRate
    • firstLine

      protected int firstLine
    • visibleLines

      protected int visibleLines
    • electricScroll

      protected int electricScroll
    • horizontalOffset

      protected int horizontalOffset
    • vertical

      protected JScrollBar vertical
    • horizontal

      protected JScrollBar horizontal
    • scrollBarsInitialized

      protected boolean scrollBarsInitialized
    • inputHandler

      protected InputHandler inputHandler
    • document

      protected SyntaxDocument document
    • documentHandler

      protected JEditTextArea.DocumentHandler documentHandler
    • lineSegment

      protected Segment lineSegment
    • selectionStart

      protected int selectionStart
    • selectionStartLine

      protected int selectionStartLine
    • selectionEnd

      protected int selectionEnd
    • selectionEndLine

      protected int selectionEndLine
    • biasLeft

      protected boolean biasLeft
    • bracketPosition

      protected int bracketPosition
    • bracketLine

      protected int bracketLine
    • magicCaret

      protected int magicCaret
    • overwrite

      protected boolean overwrite
    • rectSelect

      protected boolean rectSelect
    • unredoing

      protected boolean unredoing
  • Constructor Details

    • JEditTextArea

      public JEditTextArea(Settings settings, JComponent lineNumbers)
      Creates a new JEditTextArea with the default settings.
    • JEditTextArea

      public JEditTextArea(TextAreaDefaults defaults, JComponent lineNumbers)
      Creates a new JEditTextArea with the specified settings.
      Parameters:
      defaults - The default settings
  • Method Details

    • getPainter

      public final TextAreaPainter getPainter()
      Returns:
      The object responsible for painting this text area.
    • getInputHandler

      public final InputHandler getInputHandler()
      Returns:
      The input handler.
    • setInputHandler

      public void setInputHandler(InputHandler inputHandler)
      Sets the input handler.
      Parameters:
      inputHandler - The new input handler
    • isCaretBlinkEnabled

      public final boolean isCaretBlinkEnabled()
      Returns:
      true if the caret is blinking, false otherwise.
    • setCaretBlinkEnabled

      public void setCaretBlinkEnabled(boolean caretBlinks)
      Toggles caret blinking.
      Parameters:
      caretBlinks - True if the caret should blink, false otherwise
    • isCaretVisible

      public final boolean isCaretVisible()
      Returns:
      true if the caret is visible, false otherwise.
    • setCaretVisible

      public void setCaretVisible(boolean caretVisible)
      Sets if the caret should be visible.
      Parameters:
      caretVisible - True if the caret should be visible, false otherwise
    • blinkCaret

      public final void blinkCaret()
      Blinks the caret.
    • getElectricScroll

      public final int getElectricScroll()
      Returns:
      The number of lines from the top and button of the text area that are always visible.
    • setElectricScroll

      public final void setElectricScroll(int electricScroll)
      Sets the number of lines from the top and bottom of the text area that are always visible
      Parameters:
      electricScroll - The number of lines always visible from the top or bottom
    • updateScrollBars

      public void updateScrollBars()
      Updates the state of the scroll bars. This should be called if the number of lines in the document changes, or when the size of the text are changes.
    • getFirstLine

      public final int getFirstLine()
      Returns:
      the line displayed at the text area's origin.
    • setFirstLine

      public void setFirstLine(int firstLine)
      Sets the line displayed at the text area's origin and updates the scroll bars.
    • getVisibleLines

      public final int getVisibleLines()
      Returns the number of lines visible in this text area.
    • recalculateVisibleLines

      public final void recalculateVisibleLines()
      Recalculates the number of visible lines. This should not be called directly.
    • getHorizontalOffset

      public final int getHorizontalOffset()
      Returns the horizontal offset of drawn lines.
    • setHorizontalOffset

      public void setHorizontalOffset(int horizontalOffset)
      Sets the horizontal offset of drawn lines. This can be used to implement horizontal scrolling.
      Parameters:
      horizontalOffset - offset The new horizontal offset
    • setOrigin

      public boolean setOrigin(int firstLine, int horizontalOffset)
      A fast way of changing both the first line and horizontal offset.
      Parameters:
      firstLine - The new first line
      horizontalOffset - The new horizontal offset
      Returns:
      True if any of the values were changed, false otherwise
    • scrollToCaret

      public boolean scrollToCaret()
      Ensures that the caret is visible by scrolling the text area if necessary.
      Returns:
      True if scrolling was actually performed, false if the caret was already visible
    • scrollTo

      public boolean scrollTo(int line, int offset)
      Ensures that the specified line and offset is visible by scrolling the text area if necessary.
      Parameters:
      line - The line to scroll to
      offset - The offset in the line to scroll to
      Returns:
      True if scrolling was actually performed, false if the line and offset was already visible
    • lineToY

      public int lineToY(int line)
      Converts a line index to a y co-ordinate.
      Parameters:
      line - The line
    • yToLine

      public int yToLine(int y)
      Converts a y co-ordinate to a line index.
      Parameters:
      y - The y co-ordinate
    • offsetToX

      public final int offsetToX(int line, int offset)
      Converts an offset in a line into an x co-ordinate. This is a slow version that can be used any time.
      Parameters:
      line - The line
      offset - The offset, from the start of the line
    • _offsetToX

      public int _offsetToX(int line, int offset)
      Converts an offset in a line into an x co-ordinate. This is a fast version that should only be used if no changes were made to the text since the last repaint.
      Parameters:
      line - The line
      offset - The offset, from the start of the line
    • xToOffset

      public int xToOffset(int line, int x)
      Converts an x co-ordinate to an offset within a line.
      Parameters:
      line - The line
      x - The x co-ordinate
    • xyToOffset

      public int xyToOffset(int x, int y)
      Converts a point to an offset, from the start of the text.
      Parameters:
      x - The x co-ordinate of the point
      y - The y co-ordinate of the point
    • getDocument

      public final Document getDocument()
      Returns the document this text area is editing.
    • setDocument

      public void setDocument(SyntaxDocument document)
      Sets the document this text area is editing.
      Parameters:
      document - The document
    • getTokenMarker

      public final TokenMarker getTokenMarker()
      Returns:
      The document's token marker. Equivalent to calling getDocument().getTokenMarker().
    • setTokenMarker

      public final void setTokenMarker(TokenMarker tokenMarker)
      Sets the document's token marker. Equivalent to caling getDocument().setTokenMarker().
      Parameters:
      tokenMarker - The token marker
    • getDocumentLength

      public final int getDocumentLength()
      Returns:
      The length of the document. Equivalent to calling getDocument().getLength().
    • getLineCount

      public final int getLineCount()
      Returns:
      The number of lines in the document.
    • getLineOfOffset

      public final int getLineOfOffset(int offset)
      Returns the line containing the specified offset.
      Parameters:
      offset - The offset
    • getLineStartOffset

      public int getLineStartOffset(int line)
      Returns the start offset of the specified line.
      Parameters:
      line - The line
      Returns:
      The start offset of the specified line, or -1 if the line is invalid
    • getLineEndOffset

      public int getLineEndOffset(int line)
      Returns the end offset of the specified line.
      Parameters:
      line - The line
      Returns:
      The end offset of the specified line, or -1 if the line is invalid.
    • getLineLength

      public int getLineLength(int line)
      Returns the length of the specified line.
      Parameters:
      line - The line
    • getText

      public String getText()
      Returns:
      The entire text of this text area.
    • setText

      public void setText(String text)
      Sets the entire text of this text area.
    • getText

      public final String getText(int start, int len)
      Returns the specified substring of the document.
      Parameters:
      start - The start offset
      len - The length of the substring
      Returns:
      The substring, or null if the offsets are invalid
    • getText

      public final void getText(int start, int len, Segment segment)
      Copies the specified substring of the document into a segment. If the offsets are invalid, the segment will contain a null string.
      Parameters:
      start - The start offset
      len - The length of the substring
      segment - The segment
    • getLineText

      public final String getLineText(int lineIndex)
      Returns the text on the specified line.
      Parameters:
      lineIndex - The line
      Returns:
      The text, or null if the line is invalid
    • getLineText

      public final void getLineText(int lineIndex, Segment segment)
      Copies the text on the specified line into a segment. If the line is invalid, the segment will contain a null string.
      Parameters:
      lineIndex - The line
    • getSelectionStart

      public final int getSelectionStart()
      Returns the selection start offset.
    • getSelectionStart

      public int getSelectionStart(int line)
      Returns the offset where the selection starts on the specified line.
    • getSelectionStartLine

      public final int getSelectionStartLine()
      Returns the selection start line.
    • setSelectionStart

      public final void setSelectionStart(int selectionStart)
      Sets the selection start. The new selection will be the new selection start and the old selection end.
      Parameters:
      selectionStart - The selection start
      See Also:
    • getSelectionEnd

      public final int getSelectionEnd()
      Returns the selection end offset.
    • getSelectionEnd

      public int getSelectionEnd(int line)
      Returns the offset where the selection ends on the specified line.
    • getSelectionEndLine

      public final int getSelectionEndLine()
      Returns the selection end line.
    • setSelectionEnd

      public final void setSelectionEnd(int selectionEnd)
      Sets the selection end. The new selection will be the old selection start and the new selection end.
      Parameters:
      selectionEnd - The selection end
      See Also:
    • getCaretPosition

      public final int getCaretPosition()
      Returns the caret position. This will either be the selection start or the selection end, depending on which direction the selection was made in.
    • getCaretLine

      public final int getCaretLine()
      Returns the caret line.
    • getMarkPosition

      public final int getMarkPosition()
      Returns the mark position. This will be the opposite selection bound to the caret position.
      See Also:
    • getMarkLine

      public final int getMarkLine()
      Returns the mark line.
    • setCaretPosition

      public final void setCaretPosition(int caret)
      Sets the caret position. The new selection will consist of the caret position only (hence no text will be selected)
      Parameters:
      caret - The caret position
      See Also:
    • selectAll

      public final void selectAll()
      Selects all text in the document.
    • selectNone

      public final void selectNone()
      Moves the mark to the caret position.
    • select

      public void select(int start, int end)
      Selects from the start offset to the end offset. This is the general selection method used by all other selecting methods. The caret position will be start if start < end, and end if end > start.
      Parameters:
      start - The start offset
      end - The end offset
    • getSelectedText

      public final String getSelectedText()
      Returns the selected text, or null if no selection is active.
    • setSelectedText

      public void setSelectedText(String selectedText)
      Replaces the selection with the specified text.
      Parameters:
      selectedText - The replacement text for the selection
    • isEditable

      public final boolean isEditable()
      Returns true if this text area is editable, false otherwise.
    • setEditable

      public final void setEditable(boolean editable)
      Sets if this component is editable.
      Parameters:
      editable - True if this text area should be editable, false otherwise
    • getRightClickPopup

      public final JPopupMenu getRightClickPopup()
      Returns the right click popup menu.
    • setRightClickPopup

      public final void setRightClickPopup(JPopupMenu popup)
      Sets the right click popup menu.
      Parameters:
      popup - The popup
    • getMagicCaretPosition

      public final int getMagicCaretPosition()
      Returns the `magic' caret position. This can be used to preserve the column position when moving up and down lines.
    • setMagicCaretPosition

      public final void setMagicCaretPosition(int magicCaret)
      Sets the `magic' caret position. This can be used to preserve the column position when moving up and down lines.
      Parameters:
      magicCaret - The magic caret position
    • overwriteSetSelectedText

      public void overwriteSetSelectedText(String str)
      Similar to setSelectedText(), but overstrikes the appropriate number of characters if overwrite mode is enabled.
      Parameters:
      str - The string
      See Also:
    • isOverwriteEnabled

      public final boolean isOverwriteEnabled()
      Returns true if overwrite mode is enabled, false otherwise.
    • setOverwriteEnabled

      public final void setOverwriteEnabled(boolean overwrite)
      Sets if overwrite mode should be enabled.
      Parameters:
      overwrite - True if overwrite mode should be enabled, false otherwise.
    • isSelectionRectangular

      public final boolean isSelectionRectangular()
      Returns:
      True if the selection is rectangular, false otherwise.
    • setSelectionRectangular

      public final void setSelectionRectangular(boolean rectSelect)
      Sets if the selection should be rectangular.
      Parameters:
      rectSelect - True if the selection should be rectangular, false otherwise.
    • getBracketPosition

      public final int getBracketPosition()
      Returns:
      The position of the highlighted bracket (the bracket matching the one before the caret)
    • getBracketLine

      public final int getBracketLine()
      Returns:
      The line of the highlighted bracket (the bracket matching the one before the caret)
    • addCaretListener

      public final void addCaretListener(CaretListener listener)
      Adds a caret change listener to this text area.
      Parameters:
      listener - The listener
    • removeCaretListener

      public final void removeCaretListener(CaretListener listener)
      Removes a caret change listener from this text area.
      Parameters:
      listener - The listener
    • cut

      public void cut()
      Deletes the selected text from the text area and places it into the clipboard.
    • copy

      public void copy()
      Places the selected text into the clipboard.
    • paste

      public void paste()
      Inserts the clipboard contents into the text.
    • removeNotify

      public void removeNotify()
      Called by the AWT when this component is removed from its parent. This stops clears the currently focused component.
      Overrides:
      removeNotify in class JComponent
    • processKeyEvent

      public void processKeyEvent(KeyEvent event)
      Forwards key events directly to the input handler. This is slightly faster than using a KeyListener because some Swing overhead is avoided.
      Overrides:
      processKeyEvent in class JComponent
    • fireCaretEvent

      protected void fireCaretEvent()
    • updateBracketHighlight

      protected void updateBracketHighlight(int newCaretPosition)
    • documentChanged

      protected void documentChanged(DocumentEvent event)
    • getSyntaxSensitiveToolTipText

      public String getSyntaxSensitiveToolTipText(int x, int y)
      Return any relevant tool tip text for token at specified position. Keyword match must be exact.
      Parameters:
      x - x-coordinate of current position
      y - y-coordinate of current position
      Returns:
      String containing appropriate tool tip text. Possibly HTML-encoded.
    • getAutoIndent

      public String getAutoIndent()
      Constructs string for auto-indent feature. Returns empty string if auto-intent is disabled or if line has no leading white space. Uses getLeadingWhiteSpace(). Is used by InputHandler when processing key press for Enter key.
      Returns:
      String containing auto-indent characters to be inserted into text
    • getLeadingWhiteSpace

      public String getLeadingWhiteSpace()
      Makes a copy of leading white space (tab or space) from the current line and returns it.
      Returns:
      String containing leading white space of current line. Empty string if none.