문제

jtextpane이 포함 된 JFrame이 있습니다. 이 jtextpane의 목적은 내가 프로그래머의 텍스트 편집기 라인을 따라 무언가를 입력 할 때 단어를 강조하는 것입니다. 이를 달성하기 위해 jtextpane을 확장하고 구현했습니다. Keylistener 인터페이스와 나는 그것을 설정했다 주요 청취자 자기에게. 중요한 작업을 수행하는 방법은입니다 KeyReleased. 문제는 내가 입력 한 첫 번째 단어를 강조 할 수 있다는 것입니다. 그러나 그 후에는 시작 그리고 문서 제한 내에 있습니다. 코드 스 니펫 중 일부를 게시하고 있습니다.


// this is my highlight method
private void highlight(int start,int end) throws BadLocationException {
      Document doc = getDocument();
      Color c = Color.red;
      String text = doc.getText(start,end);
      StyleContext sc = StyleContext.getDefaultStyleContext();
      AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);
      setCharacterAttributes(aset, true);
      setSelectionStart(start);
      setSelectionEnd(end);
      replaceSelection(text);
}

//this is my keyReleased method
public void keyReleased(KeyEvent arg0) {
        char character = arg0.getKeyChar();
        if(wordStarted) { // have I started typing a new word ?
            if(character == ' ') { // end word
                try {
                    int dot = getCaret().getDot();
                    highlight(wordStart, dot - 1);
                    setCaretPosition(dot);
                    wordStarted = false;
                } catch (BadLocationException ex) {
                    ex.printStackTrace();
                }
            }
        }
        else {
            if(Character.isLetter(character)) {
                wordStarted = true;
                wordStart = getCaret().getDot() -1;
            }
        }
    }

나는 다음을 입력하려고했다. 공공 정적 그러나 단지 공공의 붉은 색입니다. 디버깅을위한 println 문도 추가했는데 이것이 출력입니다.

this is outputted after writing public
Start param:0
End param:6
Document Length:7
Document START:0
Document END:8
text:public

this is outputted after writing static
Start param:7
End param:13
Document Length:14
Document START:0
Document END:15
text:public static 
javax.swing.text.BadLocationException: Invalid location
        at javax.swing.text.GapContent.getChars(GapContent.java:189)
        at javax.swing.text.GapContent.getString(GapContent.java:167)
        at javax.swing.text.AbstractDocument.getText(AbstractDocument.java:774)
        at ifirst.visual.CodePanel.highlight(CodePanel.java:49)
        at ifirst.visual.CodePanel.keyReleased(CodePanel.java:82)
        at java.awt.Component.processKeyEvent(Component.java:6069)
        at javax.swing.JComponent.processKeyEvent(JComponent.java:2810)
        at java.awt.Component.processEvent(Component.java:5885)
        at java.awt.Container.processEvent(Container.java:2105)
        at java.awt.Component.dispatchEventImpl(Component.java:4469)
        at java.awt.Container.dispatchEventImpl(Container.java:2163)
        at java.awt.Component.dispatchEvent(Component.java:4295)
        at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1881)
        at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:742)
        at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1007)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:879)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:706)
        at java.awt.Component.dispatchEventImpl(Component.java:4339)
        at java.awt.Container.dispatchEventImpl(Container.java:2163)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4295)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

jtextpane을 얻기 위해이 코드를 작성하고 있습니다. 나는 같은 것에 관심이 없습니다 jtextpane.

도움이 되었습니까?

해결책

당신이 발견 한대로,document.getText () 시작하고 길이, 시작이 아닙니다 논쟁. 나는 의견을 보지 못하는 사람의 질문을 읽는 다른 사람들을 위해 대답과 Javadoc에 대한 링크를 제공 할 것이라고 생각했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top