Java JTextComponent Word selectWordAtCaret(JTextComponent editor)

Here you can find the source of selectWordAtCaret(JTextComponent editor)

Description

select Word At Caret

License

Apache License

Declaration

public static void selectWordAtCaret(JTextComponent editor) 

Method Source Code

//package com.java2s;
//License from project: Apache License 

import javax.swing.text.BadLocationException;

import javax.swing.text.JTextComponent;

public class Main {
    public static void selectWordAtCaret(JTextComponent editor) {
        int iStart = 0;
        int iEnd = 0;
        try {/*from   w w w  . j  a  va2  s  . c  o  m*/
            int iCaretPos = editor.getCaretPosition();
            iStart = getWordStart(editor, iCaretPos);
            iEnd = getWordEnd(editor, iCaretPos);
        } catch (BadLocationException e) {
            try {
                iEnd = editor.getCaretPosition();
                iStart = getPreviousWord(editor, iEnd);
            } catch (BadLocationException be) {
                // ignore
            }
        }

        if (iStart < iEnd) {
            editor.select(iStart, iEnd);
        }
    }

    public static int getWordStart(JTextComponent editor, int iOffset) throws BadLocationException {
        String text = editor.getText();
        iOffset = maybeAdjustOffsetToNextWord(text, iOffset);

        int iStart = iOffset;
        for (; iStart > 0 && Character.isJavaIdentifierPart(text.charAt(iStart)); iStart--)
            ;
        if (iStart != iOffset) {
            iStart++;
        }
        return iStart;
    }

    public static int getWordEnd(JTextComponent editor, int iOffset) throws BadLocationException {
        String text = editor.getText();
        iOffset = maybeAdjustOffsetToNextWord(text, iOffset);

        int iEnd = iOffset;
        for (; iEnd < text.length() && Character.isJavaIdentifierPart(text.charAt(iEnd)); iEnd++)
            ;
        if (iEnd == iOffset && !Character.isWhitespace(text.charAt(iEnd))) {
            // the word is a single, non-identifier character
            iEnd++;
        }
        return iEnd;
    }

    private static int getPreviousWord(JTextComponent editor, int iOffset) throws BadLocationException {
        String text = editor.getText();
        int iStart = getWordStart(editor, iOffset);
        for (iOffset = iStart - 1; iOffset >= 0 && Character.isWhitespace(text.charAt(iOffset)); iOffset--)
            ;
        if (iOffset < 0) {
            return iStart;
        }
        return getWordStart(editor, iOffset);
    }

    private static int maybeAdjustOffsetToNextWord(String text, int iOffset) throws BadLocationException {
        if (text.length() < iOffset) {
            throw new BadLocationException("Index out of bounds. Offset: " + iOffset + "  Length: " + text.length(),
                    iOffset);
        }

        if (iOffset > 0 && !text.isEmpty()
                && (text.length() == iOffset || Character.isWhitespace(text.charAt(iOffset)))) {
            if (Character.isWhitespace(text.charAt(iOffset - 1))) {
                while (iOffset < text.length()) {
                    if (!Character.isWhitespace(text.charAt(iOffset))) {
                        return iOffset;
                    }
                    iOffset++;
                }
            }
            iOffset--;
        }
        return iOffset;
    }
}

Related

  1. getWordEnd(JTextComponent editor, int iOffset)
  2. getWordStart(JTextComponent c, int offs)
  3. getWordWrappedTextDimension(JTextComponent textComponent, int width)
  4. replaceWordAtCaretNice(JTextComponent editor, String strText)
  5. searchInTxComp(JTextComponent src, String word)