java - Find Removed text in JTextPane -


i learning documentlistener in java jtextpane. i'm trying current string or
word (text) inserted/removed in textpane. i've tried this:

import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; import javax.swing.text.*;  class changeeffect implements documentlistener {     @override     public void insertupdate(documentevent de) {         int offset = de.getoffset();         try {               string str = de.getdocument().gettext(offset,de.getlength());               system.out.println("you entered text: " + str);         }catch(exception e){e.printstacktrace();}     }     @override     public void changedupdate(documentevent de) {     }     @override     public void removeupdate(documentevent de) {         try {             string s  = de.getdocument().gettext(de.getoffset(),de.getlength());            system.out.println("removed text is: " +s);         }catch(exception e){}     } }   public class multimodecolor {     private static void displaygui() {         jframe frame = new jframe("demo");         jtextpane text = new jtextpane();         frame.add(text);         frame.pack();         frame.setdefaultcloseoperation(jframe.dispose_on_close);         frame.setvisible(true);         text.getdocument().adddocumentlistener(new changeeffect());     }      public static void main(string[] arg) {         runnable r = new runnable() {             @override             public void run() {                 displaygui();             }         };         swingutilities.invokelater(r);     } } 

in above example got inserted text removed text display nothing(except message in println statement).
is there way removed text document?

try using documentfilter instead of documentlistener. main problem you're facing documentlistener being notified after fact, meaning time you're listener notified, text has being removed.

the documentfilter on other gets notified first...

import java.awt.borderlayout; import java.awt.eventqueue; import javax.swing.jframe; import javax.swing.jscrollpane; import javax.swing.jtextarea; import javax.swing.uimanager; import javax.swing.unsupportedlookandfeelexception; import javax.swing.text.abstractdocument; import javax.swing.text.attributeset; import javax.swing.text.badlocationexception; import javax.swing.text.documentfilter;  public class documentmonitor {      public static void main(string[] args) {         new documentmonitor();     }      public documentmonitor() {         eventqueue.invokelater(new runnable() {             @override             public void run() {                 try {                     uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname());                 } catch (classnotfoundexception | instantiationexception | illegalaccessexception | unsupportedlookandfeelexception ex) {                 }                  jtextarea ta = new jtextarea(20, 20);                 ((abstractdocument) ta.getdocument()).setdocumentfilter(new documentfilter() {                      @override                     public void replace(documentfilter.filterbypass fb, int offset, int length, string text, attributeset attrs) throws badlocationexception {                         if (offset >= fb.getdocument().getlength()) {                             system.out.println("added: " + text);                         } else {                             string old = fb.getdocument().gettext(offset, length);                             system.out.println("replaced " + old + " " + text);                         }                         super.replace(fb, offset, length, text, attrs);                     }                      @override                     public void insertstring(documentfilter.filterbypass fb, int offset, string text, attributeset attr) throws badlocationexception {                         system.out.println("added: " + text);                         super.insertstring(fb, offset, text, attr);                     }                      @override                     public void remove(documentfilter.filterbypass fb, int offset, int length) throws badlocationexception {                         system.out.println("removed: " + fb.getdocument().gettext(offset, length));                         super.remove(fb, offset, length);                     }                  });                  jframe frame = new jframe("testing");                 frame.setdefaultcloseoperation(jframe.exit_on_close);                 frame.setlayout(new borderlayout());                 frame.add(new jscrollpane(ta));                 frame.pack();                 frame.setlocationrelativeto(null);                 frame.setvisible(true);             }         });     } } 

yes, using jtextarea, process same jtextpane...


Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -