在DocumentListener中不能改变Document的内容吗?那我怎样实现JBuilder关键字变色的效果?

解决方案 »

  1.   

    接口本身当然不可以。
    假设MyDocument(extends StyledDocument)是一个JTextPane的inner class,让MyDocument实现DocumentListener,那么在DocumentListener里的事件处理方法里自然可以改变Document
      

  2.   

    StyledDocument  是个接口,我试了DefaultStyledDocument,还是不行java.lang.IllegalStateException: Attempt to mutate in notification at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1336) at javax.swing.text.DefaultStyledDocument.setCharacterAttributes(DefaultStyledDocument.java:338) at test.MyDocument$DocumentHandler.removeUpdate(MyDocument.java:26) at javax.swing.text.AbstractDocument.fireRemoveUpdate(AbstractDocument.java:242) at javax.swing.text.AbstractDocument.handleRemove(AbstractDocument.java:611) at javax.swing.text.AbstractDocument.remove(AbstractDocument.java:575) at javax.swing.text.DefaultEditorKit$DeletePrevCharAction.actionPerformed(DefaultEditorKit.java:1025) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1512) at javax.swing.JComponent.processKeyBinding(JComponent.java:2435) at javax.swing.JComponent.processKeyBindings(JComponent.java:2470) at javax.swing.JComponent.processKeyEvent(JComponent.java:2398) at java.awt.Component.processEvent(Component.java:4943) at java.awt.Container.processEvent(Container.java:1566) at java.awt.Component.dispatchEventImpl(Component.java:3639) at java.awt.Container.dispatchEventImpl(Container.java:1623) at java.awt.Component.dispatchEvent(Component.java:3480) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1688) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:593) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:765) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:698) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:559) at java.awt.Component.dispatchEventImpl(Component.java:3509) at java.awt.Container.dispatchEventImpl(Container.java:1623) at java.awt.Window.dispatchEventImpl(Window.java:1590) at java.awt.Component.dispatchEvent(Component.java:3480) at java.awt.EventQueue.dispatchEvent(EventQueue.java:450) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136) at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)