jtextpane은 계속 배정을 던지고 있습니다
-
06-09-2019 - |
문제
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에 대한 링크를 제공 할 것이라고 생각했습니다.
제휴하지 않습니다 StackOverflow