我有一个JFrame包含JTextPane.这JTextPane是突出的话,为我们的东西沿线的一个程序员的文本编辑器。为了完成这个,我的扩展JTextPane,我实现的 KeyListener 接口,和我已经设置一个 关键听众 自我。该方法做了一些重要的工作 keyReleased.问题是,我可以突出显示第一个字,我的类型,但在那之后,我继续得到BadLocation,尽管 开始结束 内文件的限制。我发布一些我的代码段:


// 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;
            }
        }
    }

我试图要类型: 公共静 但只有 公共 是红色。我甚至增加了一些释放的声明进行调试,这是产出:

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.

有帮助吗?

解决方案

因为你发现的,文件。getText() 需要一个开始, , 不一开始, 结束 参数。我想我会提供一个答案和链接如果是的话,为什么不试用一下其他人读你的问题是谁可能看起来不在评论。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top